home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
vol_200
/
278_01
/
cxl.doc
< prev
next >
Wrap
Text File
|
1990-02-13
|
284KB
|
9,837 lines
C X L
The C Programmer's Extended Function Library
Version 5.1
September 1, 1989
by Mike Smedley
Copyright (c) 1987-1989 All Rights Reserved
Reference Manual
Table of Contents
Introduction................................1
General Information....................1
Features of the CXL Library............1
Registration Information...............3
How to Contact the Author..............6
Disclaimer.............................6
Trademarks.............................6
Using CXL Functions....................7
Global Variables............................8
_kbinfo................................8
_mouse.................................8
_vinfo.................................8
_winfo.................................9
Library Functions..........................11
attrib................................11
beep..................................11
biosver...............................11
box_..................................12
capsoff...............................12
capson................................13
cclrscrn..............................13
cgardbyte.............................13
cgardword.............................14
cgareadn..............................14
cgawrbyte.............................14
cgawriten.............................15
cgawrstr..............................15
cgawrword.............................16
chgonkey..............................16
clearkeys.............................17
clockcal..............................17
clreol_...............................17
clrscrn...............................18
clrwin................................18
cvaltype..............................18
cvtcf.................................19
cvtci.................................19
cvtfc.................................20
cvtic.................................20
cxlver................................21
delay_................................21
disktoscrn............................21
disktowin.............................22
EMS Functions.........................23
emsalloc..............................24
emsdealloc............................24
emsexist..............................25
emsframe..............................25
emsfree...............................25
emsmap................................26
emsread...............................26
emstotal..............................27
i
emsver................................27
emswrite..............................27
expmem................................28
extmem................................28
fcrypt................................29
fill_.................................29
freonkey..............................30
gameport..............................30
getchf................................30
getcursz..............................31
getns.................................31
getxch................................32
gotoxy_...............................32
hidecur...............................33
inputsf...............................33
kbclear...............................34
kbmhit................................34
kbput.................................34
kbputs................................35
kbstat................................36
lcrlf.................................36
lgcursor..............................36
lprintc...............................37
lprintf...............................37
lprintns..............................38
lprints...............................38
lprintsb..............................38
lprintsu..............................39
machid................................39
mapattr...............................40
mathchip..............................40
mode..................................40
msbclear..............................41
msbpress..............................41
msbreles..............................42
mscondoff.............................43
mscursor..............................43
msgotoxy..............................44
mshbounds.............................44
mshidecur.............................45
msinit................................45
msmotion..............................45
msshowcur.............................46
msspeed...............................46
msstatus..............................46
mssupport.............................47
msvbounds.............................48
numflop...............................48
numoff................................48
numon.................................49
numpar................................49
numser................................49
printc................................50
prints................................50
ii
putchat...............................51
randfile..............................51
readchat..............................51
readcur...............................52
revattr...............................52
revsattr..............................53
scancode..............................53
scrndump..............................54
scrntodisk............................54
setattr...............................54
setcursz..............................55
setkbloop.............................55
setlines..............................56
setonkey..............................56
setvparam.............................57
showcur...............................57
smcursor..............................58
sound_................................58
spc...................................58
srestore..............................59
ssave.................................59
strblank..............................60
strbmatch.............................60
strbtrim..............................61
strchg................................61
strchksum.............................62
strcode...............................62
strdel................................63
strdela...............................63
strichg...............................64
strichksum............................64
stridel...............................65
stridela..............................65
striinc...............................66
strinc................................66
strins................................67
striocc...............................67
strischg..............................68
strisocc..............................69
strisrep..............................69
strleft...............................70
strljust..............................70
strltrim..............................71
strmatch..............................71
strmid................................72
strocc................................72
strright..............................73
strrjust..............................73
strrol................................74
strror................................74
strschg...............................75
strsetsz..............................75
strshl................................76
strshr................................77
iii
strsocc...............................77
strsrep...............................78
strtrim...............................78
struplow..............................79
sysdate...............................79
systime...............................80
tabstop...............................80
timer.................................81
touplow...............................81
videoinit.............................82
vidmode...............................82
vidtype...............................83
wactiv................................83
waitkey...............................84
waitkeyt..............................84
wborder...............................85
wbox..................................85
wbprintc..............................86
wcclear...............................86
wcenters..............................87
wchgattr..............................87
wchkbox...............................88
wchkcol...............................88
wchkcoord.............................89
wchkrow...............................89
wclear................................90
wclose................................90
wcloseall.............................90
wclreol...............................91
wclreos...............................91
wcopy.................................91
wdelline..............................92
wdrag.................................93
wdump.................................93
wdupc.................................93
wdups.................................94
werrmsg...............................95
wfill.................................95
wfillch...............................96
wfindrec..............................96
wgetc.................................96
wgetchf...............................97
wgetns................................97
wgets.................................98
wgetyn................................99
wgotoxy...............................99
whandle..............................100
Context-Sensitive Help Functions.....100
whelpcat.............................102
whelpclr.............................103
whelpdef.............................103
whelpop..............................104
whelpopc.............................104
whelppcat............................105
iv
whelpush.............................105
whelpushc............................105
whelpundef...........................106
whelpwin.............................106
whide................................107
whline...............................107
windowat.............................108
windump..............................109
Multi-Field Input Functions..........109
winpbeg..............................112
winpdef..............................113
winpfba..............................114
winpfcurr............................114
winpffind............................115
winpkey..............................115
winpread.............................116
winputsf.............................117
winsline.............................117
wintodisk............................118
wisactiv.............................118
Bar Menu Functions...................119
wmenubeg.............................120
wmenubegc............................121
wmenuend.............................122
wmenuget.............................123
wmenuiba.............................123
wmenuicurr...........................124
wmenuidsab...........................124
wmenuienab...........................125
wmenuifind...........................125
wmenuinext...........................126
wmenuitem............................126
wmenuitxt............................128
wmenumcurr...........................128
wmessage.............................129
wmove................................129
wopen................................130
wperror..............................131
wpgotoxy.............................131
wpickfile............................132
wpickstr.............................133
wprintc..............................134
wprintf..............................134
wprints..............................135
wprintsf.............................135
wputc................................136
wputns...............................137
wputs................................137
wputsw...............................138
wreadcur.............................138
wrestore.............................139
wrjusts..............................139
wsave................................140
wscanf...............................140
v
wscroll..............................141
wscrollbox...........................141
wselstr..............................142
wsetesc..............................142
wshadoff.............................143
wshadow..............................143
wsize................................144
wslide...............................144
wtabwidth............................145
wtextattr............................145
wtitle...............................146
wunhide..............................146
wunlink..............................147
wvline...............................147
wwprints.............................148
Appendix A - Text Attribute Identifiers...150
Appendix B - Keycode Table................151
Appendix C - Window Output Escape Codes...153
Appendix D - Format Control Characters....154
Appendix E - Input Field Editing Keys.....157
vi
Introduction
General Information.
The CXL library is intended to be a supplement to your C compiler's
standard run-time library. It contains over 260 multi-purpose functions
which provide a variety of capabilities. It is available for several
popular C compilers including Microsoft C, QuickC, Turbo C, and Zortech
C/C++. These routines were written in 99% highly-optimized C code
ensuring maximum program speed, minimum program size, easy modification,
and increased portability. This release is an evaluation release
containing everything you need to write C programs using the small
memory model. The libraries for the other memory models are supplied
when you register.
Features of the CXL Library.
o Powerful windowing system. Allows as many open windows as
memory permits. Windows can be stacked, tiled, shadowed, moved,
resized, and changed in many other ways. There is a whole
assortment of various input and output functions to interract
with windows.
o Multi-field formatted data entry. You can create data entry
forms that consist of one or more input fields. You have full
control over user input and can tie validation functions into
each input field. Features alpha and numeric justification,
capitalization conversion, formatting characters, and a large
assortment of editing keys.
o Moving bar menus. You can easily create pop-up, pull-down, and
Lotus-style menus, as well as any other custom menu that you can
define. Features full mouse support, nonselectable items,
global hot keys, and more.
o Scrollable pick menus. Allow you to pick one item from a list
of items. Features full mouse support and scroll bars. There
is also a dedicated file picker that uses this feature to let
you pick from a list of files, very similar to the way that the
Turbo C and QuickC environments' file pickers work.
o Context-sensitive help system. Help files are indexed for
speed. Help categories can be cross-referenced. Help can be
applied at the global, window, menu item, and input field
levels.
o Several video output methods. These include direct screen
writing, direct screen writing with CGA snow elimination, video
BIOS writing, and DESQview video buffer writing. These will
allow you to be video compatible with virtually any video
adapter or multitasking environment.
1
o EGA 43 and VGA 50-line modes. CXL provides functions to
directly change to and from these modes. CXL's video functions
are also compatible with nonstandard modes such as 132x25 and
120x43.
o Extensive mouse support. Mouse movements can be translated into
keypresses, and several CXL functions have a "point-and-shoot"
type of mouse support that utilizes a free-moving mouse cursor.
There are also several functions for directly manipulating
Microsoft-compatible mice.
o Keyboard management routines. Allows you to tie keystrokes to
functions, stuff and clear the keyboard buffer, set and read the
keyboard shift/toggle keys, and specify a function to be called
while waiting for a keypress.
o Advanced string manipulation. There are a host of string
manipulation functions that perform searching, replacing,
formatting, conversion, rotating, shifting, pattern matching,
encryption, and other string operations.
o Several other functions for expanded memory (EMS) usage, file
encryption, date and time formatting, equipment detection,
printing, sound, and more.
2
Registration Information.
CXL is distributed as User-Supported software. You are free to copy and
distribute this software freely, however, if you find it of use to you,
you are encouraged to register your copy. Registering your copy of the
software helps the author continue to provide professional-quality
software at very reasonable prices.
The Basic Registration is $35.00 and includes the full library source
code, one library disk of your choice, batch files to build and update
the libraries, royalty-free use of library functions, unlimited
technical support, and low-cost upgrades. Library disks contain all
memory model libraries supported by your compiler. They are available
for Microsoft C/QuickC, Turbo C, and Zortech C/C++.
Since you will have the source code, you will be able to use it to build
any of the libraries for the supported compilers. However, if you don't
want to hassle with building libraries, pre-compiled library disks are
available for an additional $5.00 each (one library disk is included in
the Basic Registration).
All materials are shipped on 5.25-inch floppy diskettes, however, there
is a 3.5-inch floppy diskette service available for an additional $5.00.
This is a once-per-order charge that covers as many 3.5-inch floppy
disks as are needed to ship your order.
Non-U.S. orders need to include $5.00 extra to cover additional shipping
and handling charges. Checks and money orders must be drawn on a U.S.
bank. Please send all payments payable in U.S. Dollars.
Texas residents must add 8% for state sales tax.
Print the registration form, REGISTER.DOC, or include on a piece of
paper your name, address, phone number, and brand of compiler, and send
it along with your payment to:
Mike Smedley
P.O. Box 33603
San Antonio, TX 78265-3603
If by chance, you don't have the REGISTER.DOC file, a copy of the
registration form is included on the next page.
3
CXL REGISTRATION FORM
NAME: ______________________________________________________
COMPANY: ______________________________________________________
ADDRESS: ______________________________________________________
______________________________________________________
CITY: ______________________________________________________
STATE: ________________________ ZIP CODE: _________________
PHONE: ______________________________________________________
E-MAIL ADDRESS: _______________________________________________
WHERE DID YOU RECEIVE CXL? ____________________________________
________________________________________________________________
COMMENTS: _____________________________________________________
________________________________________________________________
Basic Registration @ $35.00 $__________
(Circle ONE library disk)
Microsoft Turbo Zortech
Additional Library Disks @ $5.00 Each __________
(Circle each ADDITIONAL library disk)
Microsoft Turbo Zortech
3.5-Inch Floppy Disk Service @ $5.00 __________
(Covers entire order)
Shipping outside U.S. @ $5.00 __________
(Payments MUST be in U.S. Dollars/U.S. Bank)
SUBTOTAL: $__________
Texas Residents Add 8% State Sales Tax
$35 = $2.80 | $40 = $3.20 | $45 = $3.60 __________
$50 = $4.00 | $55 = $4.40 | $60 = $4.80
5.1 TOTAL: $__________
Remit to: Mike Smedley
P.O. Box 33603
San Antonio, TX 78265-3603
4
5
How to Contact the Author.
Primary:
CXL Tech Support BBS - (512) 590-0460 1200-14400 HST 8-N-1
Alternate:
CompuServe - 71331,2244
GEnie - M.SMEDLEY
U.S. Mail - Mike Smedley
P.O. Box 33603
San Antonio, TX 78265-3603
Disclaimer.
The author, Mike Smedley, claims no responsibility for any damages
caused by the use or misuse of this product. This product is
distributed "as is" with no warranty expressed or implied. The author
will not be responsible for any losses incurred, either directly or
indirectly, by the use of this product. Use this product entirely at
your own risk. The author reserves the right to make modifications at
any time. Prices are subject to change without notice.
Trademarks.
CompuServe is a registered trademark of CompuServe Incorporated.
DESQview is a trademark of Quarterdeck Office Systems.
Epson is a registered trademark of Seiko Epson Corporation.
GEnie is a trademark of GE Information Services.
IBM is a registered trademark of International Business Machines.
LIM and EMS are trademarks of Lotus, Intel, and Microsoft Corporations.
Lotus is a registered trademark of Lotus Development Corporation.
Microsoft is a registered trademark of Microsoft Corporation.
Turbo C is a registered trademark of Borland International.
Zortech is a trademark of Zortech Inc.
6
Using CXL Functions.
For every CXL function you use, there should be a corresponding CXL
header file #included at the top of your program. The CXL header files
should follow your standard compiler header files. For example:
#include <dos.h>
#include <stdio.h>
#include "cxldef.h"
#include "cxlwin.h"
The basic command line compiler/linker commands to build your file
containing CXL functions are as follows:
Microsoft C:
cl myfile.c cxlmss.lib
Quick C:
qcl myfile.c cxlmss.lib
Turbo C:
tcc myfile.c cxltcs.lib
Zortech C/C++:
ztc myfile cxlzts.lib
To use CXL from the Turbo C integrated environment (TC.EXE), you need to
create a project file containing the name of the CXL library. You can
call it MYFILE.PRJ and it can consist of just one line:
myfile.c cxltcs.lib
Then when you run TC.EXE, set the project file name to MYFILE.PRJ and
press the Make key.
7
Global Variables
NAME
_kbinfo
DESCRIPTION
A record which holds keyboard information. The individual structure
elements are:
kbuf - pointer to head record in key buffer.
onkey - pointer to head record in onkey list.
kbloop - pointer to function to call while waiting for a
keypress. This variable should be set with the
setkbloop() function.
inmenu - inmenu flag used internally by the menuing and picking
functions to help control mouse support.
source - source of last keypress. 0=keyboard, 1=key buffer, and
2=mouse key emulation.
SYNOPSIS
#include "cxlkey.h"
struct _kbinfo_t _kbinfo;
------------------------------------------------------------------------
NAME
_mouse
DESCRIPTION
This variable is set by the msinit() and/or mssupport() function. It
contains MS_NONE by default. If msinit() detects a mouse, it will
set _mouse to MS_KEYS. Also see the function descriptions of
msinit() and mssupport().
SYNOPSIS
#include "cxlmou.h"
int _mouse;
------------------------------------------------------------------------
NAME
_vinfo
DESCRIPTION
The video information record. The videoinit() function is
responsible for setting most of the elements in this record. If you
don't call videoinit(), they will default to CGA settings. If you
modify any of these, you must modify them AFTER the call to
videoinit(). The one exception is _vinfo.dvcheck which, if used,
must be set BEFORE the call to videoinit(). The setvparam()
function should be used where possible. The individual structure
elements are:
videoseg - video buffer segment address. Default is 0xb800.
adapter - video adapter type. Default is V_CGA.
8
numrows - number of displayed rows. Default is 25.
numcols - number of displayed columns. Default is 80.
cheight - character height in pixels. Default is 8.
cwidth - character width in pixels. Default is 8.
mono - is it a monochrome video adapter? Default is 0.
mapattr - map color attribs to monochrome attribs? By default,
if a monochrome video adapter is detected by
videoinit(), then all color attributes will be mapped
to monochrome equivalents. To disable this automatic
mapping, set _vinfo.mapattr=0;. Default is 1.
cgasnow - is CGA snow present? To turn snow elimination on,
set _vinfo.cgasnow=1; and _vinfo.usebios=0;. Default
is 0.
usebios - use BIOS for video writes? To use BIOS for video
writes, set _vinfo.usebios=1; and _vinfo.cgasnow=0;.
Default is 0.
dvcheck - check for DESQview? To disable videoinit() from
checking for DESQview, set _vinfo.dvcheck=0; before
calling videoinit(). Default is 1.
dvexist - is DESQview present? Default is 0.
SYNOPSIS
#include "cxlvid.h"
struct _vinfo_t _vinfo;
------------------------------------------------------------------------
NAME
_winfo
DESCRIPTION
The window information record. The individual structure elements
are:
active - pointer to active window's record.
hidden - pointer to head hidden window's record.
menu - pointer to head menu's record.
cmenu - pointer to current menu's record.
helptr - pointer to help information record.
handle - last handle given to a window. Every time wopen()
creates a new window, it increments this value.
maxfiles - maximum number of files that can be displayed by
wpickfile(). Default is 500.
help - current help category number.
errno - error number from last windowing function. Most
windowing functions set this variable before
returning. The werrmsg() function returns a literal
representation of this value.
total - total number of open windows.
mlevel - system variable used by menu functions.
ilevel - system variable used by menu functions.
esc - check for [Esc] in input funcions? You should use the
wsetesc() function to set this value. Default is 1
(yes).
tabwidth - window TTY output tab width. You can use wtabwidth()
9
to set this value. Default is 8.
fillch - character to fill windows with. You should use
wfillch() to set this value. Default is ' '.
SYNOPSIS
#include "cxlwin.h"
struct _winfo_t _winfo;
10
Library Functions
NAME
attrib
DESCRIPTION
Creates a text attribute. It is usually much easier to create a
text attribute using the attribute identifiers listed in Appendix A,
but this provides an alternate method.
SYNOPSIS
#include "cxlvid.h"
int attrib(int fore,int back,int bright,int blink);
INPUTS
fore - foreground color code (0-7)
back - background color code (0-7)
bright - intensity (0-1)
blink - blinking (0-1)
RETURN VALUE
The new attribute code.
ALSO SEE
setattr wtextattr
EXAMPLE
prints(10,5,attrib(6,0,1,1),"Hello, world");
------------------------------------------------------------------------
NAME
beep
DESCRIPTION
Sounds a beep in the speaker.
SYNOPSIS
#include "cxldef.h"
void beep(void);
ALSO SEE
sound_
------------------------------------------------------------------------
NAME
biosver
DESCRIPTION
Returns the ROM BIOS version date.
SYNOPSIS
11
#include "cxldef.h"
char *biosver(void);
RETURN VALUE
The address of the static string containing the ROM BIOS version
date.
ALSO SEE
machid
------------------------------------------------------------------------
NAME
box_
DESCRIPTION
"Draws" a text box on the screen.
SYNOPSIS
#include "cxlvid.h"
void box_(int srow,int scol,int erow,int ecol,int btype,int attr);
INPUTS
srow - start row of box
scol - start column of box
erow - end row of box
ecol - end column of box
btype - box type. Can be one of the following:
0 - single line
1 - double line
2 - single horz, double vert line
3 - double horz, single vert line
4 - thick line
5 - no border (uses spaces for box chars)
attr - text attribute for border characters
ALSO SEE
fill_
EXAMPLE
box_(10,10,20,40,2,YELLOW|_BLACK);
------------------------------------------------------------------------
NAME
capsoff
DESCRIPTION
Toggles the CapsLock key off.
SYNOPSIS
#include "cxlkey.h"
void capsoff(void);
12
ALSO SEE
capson kbstat numoff numon
------------------------------------------------------------------------
NAME
capson
DESCRIPTION
Toggles the CapsLock key on.
SYNOPSIS
#include "cxlkey.h"
void capson(void);
ALSO SEE
capsoff kbstat numoff numon
------------------------------------------------------------------------
NAME
cclrscrn
DESCRIPTION
Clears the screen using given text attribute and homes the cursor.
SYNOPSIS
#include "cxlvid.h"
void cclrscrn(int attr);
INPUTS
attr - text attribute to use to clear the screen with
ALSO SEE
clreol_ clrscrn clrwin
EXAMPLE
cclrscrn(BLACK|_BLACK);
------------------------------------------------------------------------
NAME
cgardbyte
DESCRIPTION
Reads a byte from CGA video memory without snow.
SYNOPSIS
#include "cxlvid.h"
int cgardbyte(char far *src);
INPUTS
src - far address to CGA video memory to read.
13
RETURN VALUE
The byte read.
ALSO SEE
cgardword cgareadn cgawrbyte cgawriten cgawrstr cgawrword
------------------------------------------------------------------------
NAME
cgardword
DESCRIPTION
Reads a word from CGA video memory without snow.
SYNOPSIS
#include "cxlvid.h"
int cgardword(int far *src);
INPUTS
src - far address to CGA video memory to read.
RETURN VALUE
The word read.
ALSO SEE
cgardbyte cgareadn cgawrbyte cgawriten cgawrstr cgawrword
------------------------------------------------------------------------
NAME
cgareadn
DESCRIPTION
Reads n words from CGA video memory without snow.
SYNOPSIS
#include "cxlvid.h"
void cgareadn(int far *src,int *dest,unsigned n);
INPUTS
src - far address to CGA video memory to read.
dest - address of buffer where words will be copied to.
n - number of words to read.
ALSO SEE
cgardbyte cgardword cgawrbyte cgawriten cgawrstr cgawrword
------------------------------------------------------------------------
NAME
cgawrbyte
DESCRIPTION
Writes a byte to CGA video memory without snow.
14
SYNOPSIS
#include "cxlvid.h"
void cgawrbyte(char far *dest,int chr);
INPUTS
dest - far address to CGA video memory to write to.
chr - the byte to write
ALSO SEE
cgardbyte cgardword cgareadn cgawriten cgawrstr cgawrword
------------------------------------------------------------------------
NAME
cgawriten
DESCRIPTION
Writes n words to CGA video memory without snow.
SYNOPSIS
#include "cxlvid.h"
void cgawriten(int *src,int far *dest,unsigned n);
INPUTS
src - address of source buffer from which words will be read.
dest - far address to CGA video memory to write to.
n - number of words to write.
ALSO SEE
cgardbyte cgardword cgareadn cgawrbyte cgawrstr cgawrword
------------------------------------------------------------------------
NAME
cgawrstr
DESCRIPTION
Writes a string to CGA video memory without snow.
SYNOPSIS
#include "cxlvid.h"
void cgawrstr(char far *dest,char *string,int attr);
INPUTS
dest - far address to CGA video memory to write to.
string - address of the string to be written.
attr - text attribute to be used for characters in string.
ALSO SEE
cgardbyte cgardword cgareadn cgawrbyte cgawriten cgawrword
------------------------------------------------------------------------
NAME
15
cgawrword
DESCRIPTION
Writes a word to CGA video memory without snow.
SYNOPSIS
#include "cxlvid.h"
void cgawrword(int far *dest,int chratr);
INPUTS
dest - far address to CGA video memory to write to.
chratr - word to be written in the form ((attr<<8)|ch).
ALSO SEE
cgardbyte cgardword cgareadn cgawrbyte cgawriten cgawrstr
------------------------------------------------------------------------
NAME
chgonkey
DESCRIPTION
The setonkey() function builds a linked list in memory that contains
each defined onkey. This function, chgonkey(), allows you to
maintain individual setonkey() lists and change back and forth
between them. You *could* use several setonkey() calls to define
and un-define keys where appropriate, but you would find that it is
a lot of trouble. chgonkey() provides painless switching between
onkey lists.
SYNOPSIS
#include "cxlkey.h"
struct _onkey_t *chgonkey(struct _onkey_t *kblist);
INPUTS
The address of the onkey list to change to. If you specify NULL,
then no onkeys will be visible.
RETURN VALUE
The address of the previous onkey list. Often you will want to save
this address so that you can restore it later.
ALSO SEE
freonkey setonkey
EXAMPLE
struct _onkey_t *k1,*k2;
setonkey(0x2100,do_alt_f,0);
/* [Alt-F] is defined */
setonkey(0x2300,do_alt_f,0);
/* [Alt-H] is defined */
k1=chgonkey(NULL);
/* [Alt-F] and [Alt-H] are disabled */
setonkey(0x1205,do_ctrl_e,0);
16
/* [Ctrl-E] is defined */
k2=chgonkey(k1);
/* [Ctrl-E] is disabled, [Alt-F] and [Alt-H] are reenabled */
freonkey();
/* [Alt-F] and [Alt-H] are disabled and freed from memory */
chgonkey(k2);
/* [Ctrl-E] is reenabled */
------------------------------------------------------------------------
NAME
clearkeys
DESCRIPTION
Clears the keyboard buffer.
SYNOPSIS
#include <conio.h>
#include "cxlkey.h"
void clearkeys(void);
ALSO SEE
kbclear waitkey
------------------------------------------------------------------------
NAME
clockcal
DESCRIPTION
Determines if a clock-calendar board is installed. This usually
will only work with the clock-calendar boards in XT-style machines.
SYNOPSIS
#include "cxldef.h"
int clockcal(void);
RETURN VALUE
Nonzero if a clock-calendar board is present.
------------------------------------------------------------------------
NAME
clreol_
DESCRIPTION
Clears to the end of line using the text attribute under the cursor.
SYNOPSIS
#include "cxlvid.h"
void clreol_(void);
ALSO SEE
cclrscrn clrscrn clrwin
17
------------------------------------------------------------------------
NAME
clrscrn
DESCRIPTION
Clears the screen using the text attribute under the cursor, and
homes the cursor.
SYNOPSIS
#include "cxlvid.h"
void clrscrn(void);
ALSO SEE
cclrscrn clreol_ clrwin
------------------------------------------------------------------------
NAME
clrwin
DESCRIPTION
Clears a window of the screen using the text attribute under the
cursor.
SYNOPSIS
#include "cxlvid.h"
void clrwin(int srow,int scol,int erow,int ecol);
INPUTS
srow - start row of window
scol - start column of window
erow - end row of window
ecol - end column of window
ALSO SEE
cclrscrn clreol_ clrscrn
------------------------------------------------------------------------
NAME
cvaltype
DESCRIPTION
Checks given character against a given CXL character type code, and
determines if that character is valid for that type. This function
is used internally by several CXL functions.
SYNOPSIS
#include "cxlstr.h"
int cvaltype(int ch,int ctype);
INPUTS
ch - character to test
18
ctype - character type code to compare with. See section on CXL
format strings for a list of valid character type codes.
See Appendix D for a list of character type codes which can
be used.
RETURN VALUE
-1 - invalid ctype was given
0 - character is not valid for given ctype
1 - character is valid for given ctype
EXAMPLE
printf("'A' is %sa valid character of type '#'\n",cvaltype('A','#')?
"":"not ");
printf("'7' is %sa valid character of type '#'\n",cvaltype('7','#')?
"":"not ");
------------------------------------------------------------------------
NAME
cvtcf
DESCRIPTION
Converts a CXL field string to a floating point number.
SYNOPSIS
#include "cxlstr.h"
double cvtcf(char *field,int wholesize,int fracsize);
INPUTS
field - address of CXL field string
wholesize - number of whole digits
fracsize - number of fractional digits
RETURN VALUE
A double precision floating point number.
ALSO SEE
cvtci cvtfc cvtic
EXAMPLE
double pi;
pi=cvtcf("314159",1,5);
printf("pi = %f\n",pi);
------------------------------------------------------------------------
NAME
cvtci
DESCRIPTION
Converts a CXL field string to an integer.
SYNOPSIS
#include "cxlstr.h"
19
int cvtci(char *field);
INPUTS
field - address of CXL field string
RETURN VALUE
An integer number.
ALSO SEE
cvtcf cvtfc cvtic
EXAMPLE
int i;
i=cvtci("32767");
printf("i = %d\n",i);
------------------------------------------------------------------------
NAME
cvtfc
DESCRIPTION
Converts a floating point number to a CXL field string.
SYNOPSIS
#include "cxlstr.h"
void cvtfc(char *field,double value,int wholesize,int fracsize);
INPUTS
field - address of buffer to receive field string
value - floating point number to convert
wholesize - number of whole digits
fracsize - number of fractional digits
ALSO SEE
cvtcf cvtci cvtic
EXAMPLE
char field[8];
cvtfc(field,3.14159,2,4);
printf("field = '%s'\n",field);
------------------------------------------------------------------------
NAME
cvtic
DESCRIPTION
Converts an integer to a CXL field string.
SYNOPSIS
#include "cxlstr.h"
void cvtic(char *field,int value,int size);
20
INPUTS
field - address of buffer to receive CXL field string
value - integer value to convert
size - field size
ALSO SEE
cvtcf cvtci cvtfc
EXAMPLE
char field[8];
cvtic(field,27,5);
printf("field = '%s'\n",field);
------------------------------------------------------------------------
NAME
cxlver
DESCRIPTION
Returns the CXL version number of the current CXL library in use.
SYNOPSIS
#include "cxldef.h"
char *cxlver(void);
RETURN VALUE
The address of the static string containing the CXL version number.
------------------------------------------------------------------------
NAME
delay_
DESCRIPTION
Delays program execution for a specified duration.
SYNOPSIS
#include "cxldef.h"
void delay_(unsigned duration);
INPUTS
duration - duration of delay (0-65535) ie. 182 = 10 seconds
ALSO SEE
timer waitkeyt
EXAMPLE
delay_(36); /* pause for 2 seconds */
------------------------------------------------------------------------
NAME
disktoscrn
21
DESCRIPTION
Copies a previously saved screen disk file to the screen.
SYNOPSIS
#include "cxlvid.h"
int disktoscrn(char *fname);
INPUTS
fname - address of the string containing file name to read from.
RETURN VALUE
Nonzero if an error occurred.
ALSO SEE
disktowin scrntodisk wintodisk
EXAMPLE
char fname[]="SCRN.DAT";
if(disktoscrn(fname)) {
printf("Error reading file: %s\n",fname);
exit(1);
}
------------------------------------------------------------------------
NAME
disktowin
DESCRIPTION
Copies a previously saved window disk file to the screen.
SYNOPSIS
#include "cxlvid.h"
int disktowin(char *fname);
INPUTS
fname - address of the string containing file name of file to read
from.
RETURN VALUE
Nonzero if an error occurred.
ALSO SEE
disktoscrn scrntodisk wintodisk
EXAMPLE
char fname[]="WIND.DAT";
if(disktowin(fname)) {
printf("Error reading file: %s\n",fname);
exit(1);
}
------------------------------------------------------------------------
22
EMS Functions
CXL contains several functions for simple management of expanded
memory. All of CXL's EMS functions are prefixed with 'ems'. For those
not familiar with expanded memory, here is a brief explanation.
The 8088 microprocessor is only able to address 1 Megabyte of memory.
When applications started needing more memory, Lotus, Intel, and
Microsoft developed the Expanded Memory Specification. This
specification allows access to more than 1 Megabyte of memory by mapping
16K 'windows' of memory on an expanded memory board in and out of an
unused area of DOS memory. The Expanded Memory Manager (EMM) is a
software driver that controls the mapping.
Physical pages are 16K blocks of memory which are located in an unused
area of DOS memory. There are typically 4 physical pages comprising a
64K contiguous area of mappable DOS memory. The EMS page frame base
address points to the beginning of the first physical page. Logical
pages are 16K blocks of memory on the expanded memory board. There can
be as many logical pages as the expanded memory board has, up to 8
Megabytes.
Every program that uses expanded memory must do the following:
1. determine if the EMM device driver is loaded
2. determine if there are enough free pages for its application
3. allocate pages of expanded memory
4. find out what the EMS page frame base address is
5. map logical pages onto physical pages
6. deallocate pages when finished with them
Here's an example of using CXL's EMS functions to perform these
procedures:
int handle1,handle2;
char buf[14];
if(!emsexist()) { /* Check for the EMM driver. */
printf("EMM not loaded\n");
exit(1);
}
handle1=emsalloc(2); /* Request 2 pages of EMS */
/* memory. */
handle2=emsalloc(2); /* Request 2 more pages. */
if(handle1==-1 || handle2==-1) { /* Test for allocation error. */
printf("EMS allocation error\n");
exit(1);
}
emsmap(handle1,0,0); /* Map logical page 0 of handle */
/* 1 to physical page 0. */
emswrite("Hello, world",0,13); /* Write a string at offset 0, */
/* automatically determines what*/
/* the page frame address is. */
emsmap(handle2,0,0); /* Map logical page 0 of handle */
/* 2 to physical page 0. */
23
emswrite("How are you?",0,13); /* Write a string at offset 0. */
emsmap(handle1,0,0); /* Map logical page 0 of handle */
/* 1 to physical page 0. */
emsread(buf,0,13); /* Read 13 bytes from offset 0 */
/* into buffer. */
printf("buf = %s\n",buf); /* Display buffer contents. */
emsmap(handle2,0,0); /* Map logical page 0 of handle */
/* 2 to physical page 0. */
emsread(buf,0,13); /* Read 13 bytes from offset 0 */
/* into buffer. */
printf("buf = %s\n",buf); /* Display buffer contents. */
emsdealloc(handle2); /* Deallocate pages belonging */
/* to handle 2. */
emsdealloc(handle1); /* Deallocate pages belonging */
/* to handle 1. */
------------------------------------------------------------------------
NAME
emsalloc
DESCRIPTION
Allocates pages of EMS memory.
SYNOPSIS
#include "cxlems.h"
int emsalloc(int numpages);
INPUTS
numpages - the number of pages (16K blocks) of memory requested.
For example, to allocate 512K of EMS memory, you would
request 512/16, or 32 pages.
RETURN VALUE
The EMS handle assigned to the allocated block of memory, or -1 if
an error occurred.
ALSO SEE
emsdealloc emsexist emsfree
------------------------------------------------------------------------
NAME
emsdealloc
DESCRIPTION
Deallocates previously allocated pages of EMS memory.
SYNOPSIS
#include "cxlems.h"
int emsdealloc(int handle);
INPUTS
handle - the EMS handle of the allocated EMS memory to deallocate
24
RETURN VALUE
Nonzero if an error occurred.
ALSO SEE
emsalloc emsexist
------------------------------------------------------------------------
NAME
emsexist
DESCRIPTION
Determines if the EMS device driver is loaded.
SYNOPSIS
#include "cxlems.h"
int emsexist(void);
RETURN VALUE
Nonzero if an EMS driver is loaded and functioning properly.
ALSO SEE
emsfree emstotal expmem
------------------------------------------------------------------------
NAME
emsframe
DESCRIPTION
Returns the EMS page frame base segment address.
SYNOPSIS
#include "cxlems.h"
unsigned emsframe(void);
RETURN VALUE
The EMS page frame base segment address, or zero if an error
occurred.
ALSO SEE
emsalloc emsexist emsmap
EXAMPLE
char far *p;
p=MK_FP(emsframe(),0);
printf("EMS memory starts at %Fp\n",p);
------------------------------------------------------------------------
NAME
emsfree
DESCRIPTION
25
Returns the number of free EMS pages (16K blocks).
SYNOPSIS
#include "cxlems.h"
unsigned emsfree(void);
RETURN VALUE
The number of free EMS pages.
ALSO SEE
emsalloc emsdealloc emstotal
------------------------------------------------------------------------
NAME
emsmap
DESCRIPTION
Maps a logical page of allocated EMS memory onto a physical page
address.
SYNOPSIS
#include "cxlems.h"
int emsmap(int handle,int lpage,int ppage);
INPUTS
handle - the EMS handle previosly assigned
lpage - the logical EMS page to map (0 - ?)
ppage - the physical DOS page to map to (0 - 3)
RETURN VALUE
Nonzero if an error occurred.
ALSO SEE
emsalloc emsdealloc emsframe
------------------------------------------------------------------------
NAME
emsread
DESCRIPTION
Reads bytes from one or more pages of allocated EMS memory. The
emsmap() function must be called prior to this function to make this
memory accessible. The source segment used will be the current EMS
page frame segment address and the destination segment will be your
program's data segment.
SYNOPSIS
#include "cxlems.h"
int emsread(char *dest,unsigned emsofs,unsigned numbytes);
INPUTS
dest - address of buffer to receive bytes read from EMS
26
emsofs - offset from the EMS page frame base segment address to
read the bytes from.
numbytes - the number of bytes to read
RETURN VALUE
Nonzero if an error occurred.
ALSO SEE
emsalloc emsdealloc emsmap emswrite
------------------------------------------------------------------------
NAME
emstotal
DESCRIPTION
Returns the total number of EMS memory pages (16K blocks) on the
system.
SYNOPSIS
#include "cxlems.h"
unsigned emstotal(void);
RETURN VALUE
The total number of EMS memory pages on the system.
ALSO SEE
emsalloc emsdealloc emsexist emsfree expmem
------------------------------------------------------------------------
NAME
emsver
DESCRIPTION
Returns the version of the EMS driver in use.
SYNOPSIS
#include "cxlems.h"
char *emsver(void);
RETURN VALUE
The address of the static string containing the EMS version number,
or NULL if an error occurred.
ALSO SEE
emsexist
------------------------------------------------------------------------
NAME
emswrite
DESCRIPTION
27
Writes bytes to one or more pages of EMS memory. The emsmap()
function must have been called prior to calling this function so
that the EMS memory will be available. The source segment will be
your program's data segment and the destination segment will be the
current EMS page frame segment address.
SYNOPSIS
#include "cxlems.h"
int emswrite(char *src,unsigned emsofs,unsigned numbytes);
INPUTS
src - address of buffer that contains the bytes to be written
emsofs - offset from EMS page frame base segment address to write
bytes to
numbytes - number of bytes to write
RETURN VALUE
Nonzero if an error occurred.
ALSO SEE
emsexist emsframe emsmap emsread
------------------------------------------------------------------------
NAME
expmem
DESCRIPTION
Determines the amount, if any, of expanded memory on the system. An
EMS driver does not have to be loaded to call this function.
SYNOPSIS
#include "cxldef.h"
unsigned expmem(void);
RETURN VALUE
The amount of expanded memory in kilobytes.
ALSO SEE
emsexist extmem
------------------------------------------------------------------------
NAME
extmem
DESCRIPTION
Determines the amount of extended memory on an AT-class machine.
SYNOPSIS
#include "cxldef.h"
unsigned extmem(void);
RETURN VALUE
28
The amount of extended memory in kilobytes.
ALSO SEE
expmem
------------------------------------------------------------------------
NAME
fcrypt
DESCRIPTION
Encrypts or decrypts a text or binary file using a modified XOR
encryption method. The same encryption key string must be used when
decrypting the file as when encrypting it.
SYNOPSIS
#include "cxldef.h"
int fcrypt(char *file,char *key);
INPUTS
file - address of filename string of file to encrypt or decrypt.
key - address of encryption key string. The string can contain any
ASCII characters (01 - FF). The longer the string is, the
better the encryption. Do not lose the key, or you won't see
your data again!
RETURN VALUE
Nonzero if an error occurred.
ALSO SEE
strcode
EXAMPLE
fcrypt("CXL.DOC","This is my encryption key string");
------------------------------------------------------------------------
NAME
fill_
DESCRIPTION
Fills in a region of the screen with a specified character and
attribute.
SYNOPSIS
#include "cxlvid.h"
void fill_(int srow,int scol,int erow,int ecol,int ch,int attr);
INPUTS
srow - start row
scol - start column
erow - end row
ecol - end column
ch - character to fill with
29
attr - attribute of character
ALSO SEE
attrib box_
EXAMPLE
fill_(5,15,16,42,'X',LRED|_MAGENTA);
------------------------------------------------------------------------
NAME
freonkey
DESCRIPTION
Frees all active onkey definitions from memory. After this call,
any keys defined using setonkey() will no longer be active.
SYNOPSIS
#include "cxlkey.h"
void freonkey(void);
ALSO SEE
chgonkey setonkey
------------------------------------------------------------------------
NAME
gameport
DESCRIPTION
Determines if a game port is installed.
SYNOPSIS
#include "cxldef.h"
int gameport(void);
RETURN VALUE
Nonzero if a game port is installed.
ALSO SEE
mathchip numflop numpar numser
------------------------------------------------------------------------
NAME
getchf
DESCRIPTION
Gets a character from the keyboard from a list of valid characters.
The case of the letters in the valid character list is ignored.
Provides Escape checking.
SYNOPSIS
#include "cxlkey.h"
30
int getchf(char *valid,int defchar);
INPUTS
valid - address of string containing list of valid characters
defchar - default selection in case [Enter] is pressed, or zero if
you don't want to have a default selection
RETURN VALUE
The character pressed, or zero if the [Esc] key was pressed. The
returned character will be uppercase.
ALSO SEE
getxch waitkey
EXAMPLE
int ch;
printf("Are you sure? ");
ch=getchf("YN",'Y');
if(!ch) printf("[Esc] was pressed\n");
------------------------------------------------------------------------
NAME
getcursz
DESCRIPTION
Returns the start and stop scan lines of cursor.
SYNOPSIS
#include "cxlvid.h"
void getcursz(int *sline,int *eline);
INPUTS
sline - address of integer to receive start scan line
eline - address of integer to receive stop scan line
ALSO SEE
setcursz
EXAMPLE
int sline,eline;
getcursz(&sline,&eline);
printf("Cursor start & stop scan lines: %d, %d\n",sline,eline);
------------------------------------------------------------------------
NAME
getns
DESCRIPTION
Inputs a string of a specified maximum length from the keyboard.
Provides Escape checking.
SYNOPSIS
31
#include "cxlkey.h"
int getns(char *str,int maxchars);
INPUTS
str - address of buffer to receive input string
maxchars - maximum length of the input string
RETURN VALUE
Nonzero if the [Esc] key was pressed during user input.
ALSO SEE
inputsf
EXAMPLE
char name[11];
printf("Enter your name: ");
if(getns(name,10))
printf("\n[Esc] was pressed\n");
else
printf("\nYour name is: %s\n",name);
------------------------------------------------------------------------
NAME
getxch
DESCRIPTION
Gets a key (ASCII code/scan code) from the keyboard. All CXL
functions that interract with the keyboard call this function for
input.
SYNOPSIS
#include "cxlkey.h"
unsigned getxch(void);
RETURN VALUE
The keycode of the pressed key. The keycode contains the scan code
of the keypress in the upper byte, and the ASCII character in the
lower byte. A list of keycodes is in Appendix B.
ALSO SEE
getchf
EXAMPLE
unsigned int keycode;
printf("Press a key: ");
keycode=getxch();
printf("%c\nkeycode = %#x, scancode = %d, ASCII code = %d\n"
,keycode,keycode,keycode>>8,keycode&0x00ff);
------------------------------------------------------------------------
NAME
gotoxy_
32
DESCRIPTION
Sets cursor coordinates on the screen.
SYNOPSIS
#include "cxlvid.h"
void gotoxy_(int row,int col);
INPUTS
row - cursor row (Y coordinate)
col - cursor column (X coordinate)
ALSO SEE
readcur
------------------------------------------------------------------------
NAME
hidecur
DESCRIPTION
Hides the cursor. Retains the cursor shape so that when showcur()
is called, the original cursor shape will be restored.
SYNOPSIS
#include "cxlvid.h"
void hidecur(void);
ALSO SEE
lgcursor setcursz showcur smcursor
------------------------------------------------------------------------
NAME
inputsf
DESCRIPTION
Inputs a formatted string from the keyboard. This function provides
an extremely powerful method of accept single-line input from the
user. You can limit input characters to certain characters of a
type, such as numbers, insert strings in between typed in
characters, create custom prompts, disable [Enter] until the field
is filled, and more. Provides Escape checking.
SYNOPSIS
#include "cxlkey.h"
int inputsf(char *str,char *fmt);
INPUTS
str - address of the buffer receive input string
fmt - address of the format string. See Appendix D for valid format
string characters.
RETURN VALUE
0 - no error
33
1 - [Esc] key was pressed
2 - invalid format string
ALSO SEE
getns
EXAMPLE
char buf[21];
if(inputsf(buf,"'Enter your name: '!M!AAAAAAAAAAAAAAAAAAAA")==1)
printf("\n[Esc] key was pressed\n");
else
printf("\nYour name is: %s\n",buf);
------------------------------------------------------------------------
NAME
kbclear
DESCRIPTION
Clears CXL's internal keyboard buffer.
SYNOPSIS
#include "cxlkey.h"
void kbclear(void);
ALSO SEE
clearkeys kbmhit kbput kbputs
------------------------------------------------------------------------
NAME
kbmhit
DESCRIPTION
Determines if a key has been pressed and is waiting to be got. Also
checks for mouse button presses. Replaces the kbhit() function.
SYNOPSIS
#include "cxlkey.h"
int kbmhit(void);
RETURN VALUE
Nonzero if a key is waiting to be got.
ALSO SEE
kbclear
------------------------------------------------------------------------
NAME
kbput
DESCRIPTION
Places a keystroke into CXL's internal keyboard buffer. This will
34
only affect CXL's keyboard input functions. This function is useful
for making keyboard scripts for demos, etc., or forcing user
keyboard input.
SYNOPSIS
#include "cxlkey.h"
int kbput(unsigned xch);
INPUTS
xch - keycode of keypress to place in buffer. The scan code will be
in the high byte and the ASCII code will be in the low byte.
See Appendix B for a list of keycodes which you can use.
RETURN VALUE
Nonzero if memory allocation error.
ALSO SEE
kbclear kbputs
EXAMPLE
kbput(0x011b); /* puts an [Esc] keypress into CXL's buffer */
------------------------------------------------------------------------
NAME
kbputs
DESCRIPTION
Places a string of characters into CXL's internal keyboard buffer.
This will only affect CXL's keyboard input functions. This function
is useful for making keyboard scripts for demos, etc., and forcing
user keyboard input.
SYNOPSIS
#include "cxlkey.h"
int kbputs(char *str);
INPUTS
str - address of string of characters to stuff into buffer
RETURN VALUE
Nonzero if memory allocation error.
ALSO SEE
kbclear kbput
EXAMPLE
char buf[21];
kbputs("Mike");
printf("Enter your name: ");
getns(buf,20);
------------------------------------------------------------------------
35
NAME
kbstat
DESCRIPTION
Returns the status of the keyboard control keys.
SYNOPSIS
#include "cxlkey.h"
unsigned kbstat(void);
RETURN VALUE
Status word of the keyboard flag. You can determine which key(s)
are being pressed/toggled by masking the status word (using the
bitwise '&' operator) with one of the following:
RSHIFT - right shift pressed
LSHIFT - left shift pressed
CTRL - [Ctrl] pressed
ALT - [Alt] pressed
SCRLOCK - [ScrollLock] toggled
NUMLOCK - [NumLock] toggled
CAPSLOCK - [CapsLock] toggled
INS - [Ins] toggled
ALSO SEE
capsoff capson numoff numon
EXAMPLE
printf("NumLock is %s\n",(kbstat()&NUMLOCK)?"on":"off");
------------------------------------------------------------------------
NAME
lcrlf
DESCRIPTION
Prints a carriage return and line feed on the printer (PRN).
SYNOPSIS
#include "cxlprn.h"
void lcrlf(void);
ALSO SEE
lprintc lprintf lprints
------------------------------------------------------------------------
NAME
lgcursor
DESCRIPTION
Makes the cursor large.
SYNOPSIS
#include "cxlvid.h"
36
void lgcursor(void);
ALSO SEE
hidecur setcursz showcur smcursor
------------------------------------------------------------------------
NAME
lprintc
DESCRIPTION
Prints a character on the printer (PRN).
SYNOPSIS
#include "cxlprn.h"
void lprintc(int ch);
INPUTS
ch - the character to print
ALSO SEE
lcrlf lprintf
EXAMPLE
lprintc(12); /* sends a form feed to the printer */
------------------------------------------------------------------------
NAME
lprintf
DESCRIPTION
Sends formatted output to the printer (PRN). Works similar to the
standard C printf() function.
SYNOPSIS
#include "cxlprn.h"
void lprintf(const char *format,...);
INPUTS
format - format string. Refer to the section on printf() in your
compiler's run-time library reference.
... - any additional arguments
ALSO SEE
lcrlf lprintc lprintns lprints
EXAMPLE
char s[]="Hello";
int i=5;
char c='Z';
lprintf("s = %s, i = %d, c = %c\n\f",s,i,c);
------------------------------------------------------------------------
37
NAME
lprintns
DESCRIPTION
Prints a string to a fixed width on the printer (PRN).
SYNOPSIS
#include "cxlprn.h"
void lprintns(char *str,int width);
INPUTS
str - the address of the string to print
width - width to print string, either by padding or truncating.
ALSO SEE
lcrlf lprintf lprints lprintsu
EXAMPLE
char string[]="Hello, world";
lprintns(string,5);
lprintf(".\n");
lprintns(string,20);
lprintf(".\n");
------------------------------------------------------------------------
NAME
lprints
DESCRIPTION
Prints a string on the printer (PRN).
SYNOPSIS
#include "cxlprn.h"
void lprints(char *str);
INPUTS
str - the address of the string to print
ALSO SEE
lcrlf lprintf lprintns lprintsu
EXAMPLE
lprints("Hello, world\n");
------------------------------------------------------------------------
NAME
lprintsb
DESCRIPTION
Prints a bold-faced string on the printer (PRN).
SYNOPSIS
38
#include "cxlprn.h"
void lprintsb(char *str,int reps);
INPUTS
str - address of the string to print
reps - number of strike repetitions (the more, the darker the print)
ALSO SEE
lcrlf lprintf lprintns lprints lprintsu
------------------------------------------------------------------------
NAME
lprintsu
DESCRIPTION
Prints an underlined string on the printer (PRN).
SYNOPSIS
#include "cxlprn.h"
void lprintsu(char *str);
INPUTS
str - address of the string to print
ALSO SEE
lcrlf lprintf lprintns lprints lprintsb
------------------------------------------------------------------------
NAME
machid
DESCRIPTION
Returns the value of the machine ROM ID byte.
SYNOPSIS
#include "cxldef.h"
int machid(void);
RETURN VALUE
The value of the machine ROM ID byte. Will usually be one of the
following values. Any other value is unknown.
IBMPC - IBM PC
IBMPCXT - IBM PC/XT
IBMPCJR - IBM PCjr
IBMPCAT - IBM PC/AT
IBMPCXT2 - IBM PC/XT-2
IBMCONV - IBM PC Convertible
SPERRYPC - Sperry PC
ALSO SEE
biosver
39
------------------------------------------------------------------------
NAME
mapattr
DESCRIPTION
Translates a color text attribute into its approximate monochrome
equivalent. All of CXL's video functions automatically call this,
so you would only need to call this for your own functions.
SYNOPSIS
#include "cxlvid.h"
int mapattr(int attr);
INPUTS
attr - the color text attribute to translate
RETURN VALUE
The monochrome equivalent of the color text attribute.
ALSO SEE
revsattr
EXAMPLE
int attr=LCYAN|_BLUE;
prints(0,0,attr,"In living color!");
_vinfo.mapattr=1; /* force monochrome attributes */
prints(1,0,mapattr(attr),"In dull monochrome....");
------------------------------------------------------------------------
NAME
mathchip
DESCRIPTION
Determines if a math coprocessor is installed.
SYNOPSIS
#include "cxldef.h"
int mathchip(void);
RETURN VALUE
Nonzero if a math coprocessor is installed.
ALSO SEE
gameport numflop numpar numser
EXAMPLE
printf("You do %shave a math coprocessor\n",mathchip()?"":"not ");
------------------------------------------------------------------------
NAME
mode
40
DESCRIPTION
Sets the video mode.
SYNOPSIS
#include "cxlvid.h"
void mode(int mode_code);
INPUTS
mode_code - video mode code
ALSO SEE
setlines vidmode vidtype
------------------------------------------------------------------------
NAME
msbclear
DESCRIPTION
Clears the mouse driver's "button presses" and "button releases"
counters (removes them from the queue).
SYNOPSIS
#include "cxlmou.h"
void msbclear(void);
ALSO SEE
kbmhit msbpress msbreles msinit msstatus
------------------------------------------------------------------------
NAME
msbpress
DESCRIPTION
Returns information about the specific button presses of mouse.
SYNOPSIS
#include "cxlmou.h"
void msbpress(int button,int *bstat,int *bcount,int *row,int *col);
INPUTS
button - button to check:
0 - left button
1 - right button
2 - middle button (if applicable)
bstat - address of integer to receive button status word. Possible
button status values are:
0 - no buttons pressed
1 - left button pressed
2 - right button pressed
4 - middle button pressed (if applicable)
3 - left & right buttons pressed
5 - left & middle buttons pressed (if applicable)
41
6 - middle & right buttons pressed (if applicable)
7 - all 3 buttons pressed (if applicable)
bcount - address of integer to receive number of times pressed since
last call
row - address of integer to receive row at time of button press
col - address of integer to receive column at time of button
press
ALSO SEE
msbclear msbreles msinit msstatus
EXAMPLE
int bstat,bcount,row,col;
msbpress(0,&bstat,&bcount,&row,&col);
------------------------------------------------------------------------
NAME
msbreles
DESCRIPTION
Returns informmation about specific button releases of mouse.
SYNOPSIS
#include "cxlmou.h"
void msbreles(int button,int *bstat,int *bcount,int *row,int *col);
INPUTS
button - button to check:
0 - left button
1 - right button
2 - middle button (if applicable)
bstat - address of integer to receive button status word. Possible
button status values are:
0 - no buttons pressed
1 - left button pressed
2 - right button pressed
4 - middle button pressed (if applicable)
3 - left & right buttons pressed
5 - left & middle buttons pressed (if applicable)
6 - middle & right buttons pressed (if applicable)
7 - all 3 buttons pressed (if applicable)
bcount - address of integer to receive number of times released
since last call
row - address of integer to receive row at time of button release
col - address of integer to receive column at time of button
release
ALSO SEE
msbclear msbpress msinit msstatus
EXAMPLE
int bstat,bcount,row,col;
msbreles(0,&bstat,&bcount,&row,&col);
42
------------------------------------------------------------------------
NAME
mscondoff
DESCRIPTION
Conditionally hides the mouse cursor depending on whether or not the
mouse cursor falls within the input screen coordinates.
SYNOPSIS
#include "cxlmou.h"
void mscondoff(int srow,int scol,int erow,int ecol);
INPUTS
srow - start row
scol - start column
erow - end row
ecol - end column
ALSO SEE
mshidecur msinit msshowcur
------------------------------------------------------------------------
NAME
mscursor
DESCRIPTION
Sets the mouse text cursor type. The mouse cursor can be a hardware
or softare cursor. The hardware cursor is the same as the normal
cursor you see when you are at the DOS prompt. Because the mouse's
hardware cursor is the same as the normal cursor, they can interfere
with each other, making this method impractical to use in most
cases. The software mouse cursor is a text box that can reveal the
underlying character. This is the cursor most used by programs
including other CXL mouse support functions.
SYNOPSIS
#include "cxlmou.h"
void mscursor(unsigned curtype,unsigned smask,unsigned cmask);
INPUTS
curtype - cursor type. 0=software, 1=hardware
smask - screen mask (software cursor) or start scan line (hardware
cursor). If using a software cursor, the screen mask
determines which of the characters attributes are
preserved. It is ANDed with the screen character and
attribute. The bit format for both smask and cmask are:
Bit Content
--- -------
0-7 - ASCII character code
8-10 - foreground color
11 - 0=intensity off, 1=intensity on
12-14 - background color
43
15 - 0=no blink, 1=blink
cmask - cursor mask (software cursor) or stop scan line (hardware
cursor). If using a software cursor, the cursor mask is
used to determine which of the characteristics are changed
by the cursor. The cmask is XORed with the result of
(smask AND character-attribute). The bit values for cmask
are the same as those for smask.
ALSO SEE
msinit msshowcur
EXAMPLE
mscursor(1,1,7); /* makes a full-block hardware cursor */
msshowcur();
------------------------------------------------------------------------
NAME
msgotoxy
DESCRIPTION
Sets the mouse cursor coordinates.
SYNOPSIS
#include "cxlmou.h"
void msgotoxy(int row,int col);
INPUTS
row - row (Y coordinate)
col - column (X coordinate)
ALSO SEE
msinit msstatus
EXAMPLE
msgotoxy(13,45); /* sets mouse cursor to row 13, column 45 */
------------------------------------------------------------------------
NAME
mshbounds
DESCRIPTION
Sets the mouse's upper and lower horizontal bounds.
SYNOPSIS
#include "cxlmou.h"
void mshbounds(int leftcol,int rightcol);
INPUTS
leftcol - left column boundary
rightcol - right column boundary
ALSO SEE
44
msinit msvbounds
EXAMPLE
mshbounds(5,45); /* restricts mouse cursor movement */
/* between columns 5 & 45 */
------------------------------------------------------------------------
NAME
mshidecur
DESCRIPTION
Hides the mouse cursor.
SYNOPSIS
#include "cxlmou.h"
void mshidecur(void);
ALSO SEE
msinit msshowcur
------------------------------------------------------------------------
NAME
msinit
DESCRIPTION
Determines if a mouse is present. If so, initializes mouse and sets
the global variable _mouse to MS_KEYS which causes mouse movements
to be translated to the keyboard arrow keys.
SYNOPSIS
#include "cxlmou.h"
int msinit(void);
RETURN VALUE
Nonzero if mouse is present.
ALSO SEE
mssupport
EXAMPLE
if(msinit())
printf("Mouse initialized\n");
else
printf("Mouse does not exist\n");
------------------------------------------------------------------------
NAME
msmotion
DESCRIPTION
Gets information about the movement of the mouse.
45
SYNOPSIS
#include "cxlmou.h"
void msmotion(int *rowcount,int *colcount);
INPUTS
rowcount - address of integer to receive number of rows moved
colcount - address of integer to receive number of columns moved
ALSO SEE
msinit msstatus
EXAMPLE
int rowcount,colcount;
msmotion(&rowcount,&colcount);
------------------------------------------------------------------------
NAME
msshowcur
DESCRIPTION
Reveals the hidden mouse cursor.
SYNOPSIS
#include "cxlmou.h"
void msshowcur(void);
ALSO SEE
mscursor mshidecur msinit
------------------------------------------------------------------------
NAME
msspeed
DESCRIPTION
Adjusts the mouse's speed by changing its sensitivity.
SYNOPSIS
#include "cxlmou.h"
void msspeed(int xratio,int yratio);
INPUTS
xratio - horizontal speed (higher numbers are slower)
yratio - vertical speed (higher numbers are slower)
ALSO SEE
msinit
------------------------------------------------------------------------
NAME
msstatus
46
DESCRIPTION
Returns the status of the mouse.
SYNOPSIS
#include "cxlmou.h"
void msstatus(int *bstat,int *row,int *col);
INPUTS
bstat - address of integer to receive button status word. Possible
button status values are:
0 - no buttons pressed
1 - left button pressed
2 - right button pressed
4 - middle button pressed (if applicable)
3 - left & right buttons pressed
5 - left & middle buttons pressed (if applicable)
6 - middle & right buttons pressed (if applicable)
7 - all 3 buttons pressed (if applicable)
row - address of integer to receive current row coordinate
col - address of integer to receive current column coordinate
ALSO SEE
msinit
EXAMPLE
int bstat,row,col;
msstatus(&bstat,&row,&col);
printf("The mouse cursor is at row %d, column %d\n",row,col);
------------------------------------------------------------------------
NAME
mssupport
DESCRIPTION
Selects the type of mouse support to be used by CXL functions which
support them. If no mouse exists, the call to this function is
ignored. This function should be called after msinit().
SYNOPSIS
#include "cxlmou.h"
void mssupport(int type);
INPUTS
type - type of mouse support. Can be one of the following:
MS_NONE - no mouse support
MS_KEYS - mouse movements are translated into keystrokes.
This is the default set by msinit() if it finds
a mouse driver present.
MS_CURS - point-and-shoot mouse cursor where supported
MS_FULL - full mouse support. If a CXL function supports
a point-and-shoot mouse cursor, then that will
be used, otherwise mouse movements will be
translated into keystrokes.
47
ALSO SEE
msinit
EXAMPLE
mssupport(MS_FULL);
------------------------------------------------------------------------
NAME
msvbounds
DESCRIPTION
Sets the mouse's left and right vertical bounds.
SYNOPSIS
#include "cxlmou.h"
void msvbounds(int toprow,int botrow);
INPUTS
toprow - top row boundary
botrow - bottom row boundary
ALSO SEE
mshbounds msinit
EXAMPLE
msvbounds(3,20); /* restricts mouse cursor movement */
/* between rows 3 and 20 */
------------------------------------------------------------------------
NAME
numflop
DESCRIPTION
Returns the number of floppy disk drives installed.
SYNOPSIS
#include "cxldef.h"
int numflop(void);
RETURN VALUE
The number of floppy disk drives installed
ALSO SEE
gameport mathchip numpar numser
EXAMPLE
printf("You have %d floppy drives installed\n",numflop());
------------------------------------------------------------------------
NAME
numoff
48
DESCRIPTION
Toggles the NumLock key off.
SYNOPSIS
#include "cxlkey.h"
void numoff(void);
ALSO SEE
capsoff kbstat numon
------------------------------------------------------------------------
NAME
numon
DESCRIPTION
Toggles the NumLock key on.
SYNOPSIS
#include "cxlkey.h"
void numon(void);
ALSO SEE
capson kbstat numoff
------------------------------------------------------------------------
NAME
numpar
DESCRIPTION
Returns the number of parallel ports.
SYNOPSIS
#include "cxldef.h"
int numpar(void);
RETURN VALUE
The number of parallel ports installed.
ALSO SEE
gameport mathchip numflop numser
EXAMPLE
printf("You have %d parallel ports\n",numpar());
------------------------------------------------------------------------
NAME
numser
DESCRIPTION
Returns the number of serial ports installed.
49
SYNOPSIS
#include "cxldef.h"
int numser(void);
RETURN VALUE
The number of serial ports installed.
ALSO SEE
gameport mathchip numflop numpar
EXAMPLE
printf("You have %d serial ports\n",numser());
------------------------------------------------------------------------
NAME
printc
DESCRIPTION
Displays a character to the screen at a specified location, using a
specified attribute. Does not recognize control characters. Does
not affect cursor position.
SYNOPSIS
#include "cxlvid.h"
void printc(int row,int col,int attr,int ch);
INPUTS
row - row to display character at
col - column to display character at
attr - text attribute for character
ch - character to print
ALSO SEE
attrib prints
EXAMPLE
printc(12,40,BLINK|LRED|_BLACK,'!');
------------------------------------------------------------------------
NAME
prints
DESCRIPTION
Displays a string on the screen at a specified location, using a
specified attribute. Does not affect cursor position.
SYNOPSIS
#include "cxlvid.h"
void prints(int row,int col,int attr,char *str);
INPUTS
row - row to display string at
50
col - column to display string at
attr - text attribute for characters displayed
str - address of string to display
ALSO SEE
attrib printc
EXAMPLE
prints(24,15,YELLOW|_BROWN,"Hello, world");
------------------------------------------------------------------------
NAME
putchat
DESCRIPTION
Puts a character and its attribute on the screen at current cursor
position using video BIOS calls.
SYNOPSIS
#include "cxlvid.h"
void putchat(int ch,int attr);
INPUTS
ch - character to display
attr - attribute to display character in
ALSO SEE
readchat
------------------------------------------------------------------------
NAME
randfile
DESCRIPTION
Creates a random file name.
SYNOPSIS
#include "cxldef.h"
char *randfile(void);
RETURN VALUE
Address of the static string containing the random file name.
EXAMPLE
printf("A random file name is: %s\n",randfile());
------------------------------------------------------------------------
NAME
readchat
DESCRIPTION
51
Reads the character and attribute under the cursor using video BIOS
calls.
SYNOPSIS
#include "cxlvid.h"
unsigned readchat(void);
RETURN VALUE
Unsigned integer containing the character in the low byte and
attribute in the high byte.
ALSO SEE
putchat revattr setattr
EXAMPLE
unsigned int chat;
chat=readchat();
printf("character value = %d, attribute value = %d\n",chat&0x00ff
,chat>>8);
------------------------------------------------------------------------
NAME
readcur
DESCRIPTION
Reads the current cursor location.
SYNOPSIS
#include "cxlvid.h"
void readcur(int *row,int *col);
INPUTS
row - address of integer to receive cursor row
col - address of integer to receive cursor column
ALSO SEE
gotoxy_
EXAMPLE
int row,col;
readcur(&row,&col);
printf("The cursor is at row %d, column %d\n",row,col);
------------------------------------------------------------------------
NAME
revattr
DESCRIPTION
Reverses the attribute of the character under the current cursor
position, and continues for the specified number of characters.
Uses video BIOS calls.
52
SYNOPSIS
#include "cxlvid.h"
void revattr(int count);
INPUTS
count - the number of characters to reverse the attribute of
ALSO SEE
readchat revsattr setattr
EXAMPLE
prints(0,0,LCYAN|_BLUE,"Hello, world");
gotoxy_(0,0);
revattr(5);
------------------------------------------------------------------------
NAME
revsattr
DESCRIPTION
Returns the inverse of the given text attribute.
SYNOPSIS
#include "cxlvid.h"
int revsattr(int attr);
INPUTS
attr - text attribute
RETURN VALUE
The inverted text attribute.
ALSO SEE
mapattr revattr
EXAMPLE
int attr=LMAGENTA|_RED;
prints(0,0,attr,"Normal");
prints(1,0,revsattr(attr),"Reverse");
------------------------------------------------------------------------
NAME
scancode
DESCRIPTION
Returns the common scan code of the specified character.
SYNOPSIS
#include "cxlkey.h"
int scancode(int ch);
INPUTS
53
ch - an ASCII character
RETURN VALUE
The common scan code of the specified character. The characters
'0' thru '9', '*', '-', '+', and '.' will return their scan code
from their regular keys, not their numeric keypad keys.
------------------------------------------------------------------------
NAME
scrndump
DESCRIPTION
Dumps the current screen to the printer (PRN).
SYNOPSIS
#include "cxlprn.h"
void scrndump(void);
ALSO SEE
scrntodisk ssave videoinit
------------------------------------------------------------------------
NAME
scrntodisk
DESCRIPTION
Copies the current screen to a disk file.
SYNOPSIS
#include "cxlvid.h"
int scrntodisk(char *fname);
INPUTS
fname - address of the string containing the filename of the file
to write to
RETURN VALUE
Nonzero if an error occurred.
ALSO SEE
disktoscrn scrndump ssave wintodisk
------------------------------------------------------------------------
NAME
setattr
DESCRIPTION
Sets the attribute of the character under the current cursor
location, and continues for the specified number of characters.
Uses video BIOS calls.
54
SYNOPSIS
#include "cxlvid.h"
void setattr(int attr,int count);
INPUTS
attr - attribute to set character
count - the number of characters to set the attribute of
ALSO SEE
attrib readchat revattr
EXAMPLE
prints(0,0,LCYAN|_BLUE,"Hello, world");
gotoxy_(0,0);
setattr(LMAGENTA|_RED,5);
------------------------------------------------------------------------
NAME
setcursz
DESCRIPTION
Sets the cursor size. This function is video adapter dependent.
SYNOPSIS
#include "cxlvid.h"
void setcursz(int sline,int eline);
INPUTS
sline - start line of cursor, 32 = no cursor
eline - end line of cursor
ALSO SEE
getcursz hidecur lgcursor showcur smcursor
EXAMPLE
setcursz(1,7); /* sets cursor to large block on color displays */
------------------------------------------------------------------------
NAME
setkbloop
DESCRIPTION
Most of the time your program is idle, it is waiting for a keypress.
This function allows you to set up a function that will be called
while waiting for a keypress. For example, you could update a
status line, or update a time clock continuously while waiting for a
keypress.
SYNOPSIS
#include "cxlkey.h"
void setkbloop(void (*func)(void));
55
INPUTS
func - address of the function to be called while waiting for
keypress or NULL to cancel the procedure.
ALSO SEE
waitkey waitkeyt
------------------------------------------------------------------------
NAME
setlines
DESCRIPTION
Sets the number of lines on the display. The videoinit() function
must have previously been called.
SYNOPSIS
#include "cxlvid.h"
int setlines(int numlines);
INPUTS
numlines - the number of lines to set the display to. Valid numbers
are:
25 - all video adapters
43 - EGA
50 - VGA
RETURN VALUE
Nonzero if an error occurred.
ALSO SEE
mode videoinit vidtype
EXAMPLE
printf("%s\n",setlines(43)?"You do not have an EGA card":
"You are now in EGA 43-line mode");
------------------------------------------------------------------------
NAME
setonkey
DESCRIPTION
Attaches/detaches a keypress to a function call. Works by
intercepting any calls to CXL keyboard input functions. Whenever
you use one of CXL's keyboard input functions, the input function
will check to see if the pressed key has been defined. If so, then
the input function will call the corresponding function. If not,
then the input function will pass on the keypress as normal.
SYNOPSIS
#include "cxlkey.h"
int setonkey(unsigned keycode,void (*func) (void),unsigned pass);
56
INPUTS
keycode - keycode of key to define. If the keycode was previously
defined, it will be re-defined. See Appendix B for a list
of keycodes.
func - address of the function to call upon keypress. If NULL is
specified for func, then the specified keycode will be
un-defined.
pass - keycode of key to pass back to caller after the onkey
function returns. This allows you to have one keypress
return the code for another. If pass==0, then the key
will not be passed back, and execution will resume where
the interruption occurred.
RETURN VALUE
Nonzero if a memory allocation error occurred.
ALSO SEE
chgonkey freonkey setkbloop
EXAMPLE
setonkey(0x011b,escape_routine,0);
------------------------------------------------------------------------
NAME
setvparam
DESCRIPTION
Sets video display parameters.
SYNOPSIS
#include "cxlvid.h"
int setvparam(int setting);
INPUTS
setting - video display parameter. Can be one of the following:
VP_DMA - turn on direct screen writes
VP_CGA - turn on direct screen writes w/CGA snow elimination
VP_BIOS - turn on BIOS screen writes
VP_MONO - turn on monochrome attribute translation
VP_COLOR - turn off monochrome attribute translation
RETURN VALUE
Nonzero if error.
ALSO SEE
videoinit vidtype
------------------------------------------------------------------------
NAME
showcur
DESCRIPTION
57
Reveals the hidden cursor, restoring it to its previous shape.
SYNOPSIS
#include "cxlvid.h"
void showcur(void);
ALSO SEE
hidecur lgcursor setcursz smcursor
------------------------------------------------------------------------
NAME
smcursor
DESCRIPTION
Makes the cursor small.
SYNOPSIS
#include "cxlvid.h"
void smcursor(void);
ALSO SEE
hidecur lgcursor setcursz showcur
------------------------------------------------------------------------
NAME
sound_
DESCRIPTION
Sounds a tone of specified pitch and duration.
SYNOPSIS
#include "cxldef.h"
void sound_(unsigned pitch,unsigned duration);
INPUTS
pitch - pitch of tone (0-65535)
duration - duration of tone (0-65535). ie. 182 = 10 seconds
ALSO SEE
beep
EXAMPLE
sound_(5000,36); /* sounds a tone for 2 seconds */
------------------------------------------------------------------------
NAME
spc
DESCRIPTION
Displays a specified number of spaces to the screen using the text
attribute of the character under the cursor.
58
SYNOPSIS
#include "cxlvid.h"
void spc(int num);
INPUTS
num - number of spaces to display
------------------------------------------------------------------------
NAME
srestore
DESCRIPTION
Restores a previously saved screen, and frees the memory allocated
by ssave().
SYNOPSIS
#include "cxlvid.h"
void srestore(int *sbuf);
INPUTS
sbuf - address of previously saved screen buffer
ALSO SEE
ssave
------------------------------------------------------------------------
NAME
ssave
DESCRIPTION
Saves the current screen to a buffer. To work with monochrome video
adapters, videoinit() must have previously been called.
SYNOPSIS
#include "cxlvid.h"
int *ssave(void);
RETURN VALUE
Address of newly created screen buffer or NULL if a memory
allocation error occurred.
ALSO SEE
scrntodisk srestore videoinit wsave
EXAMPLE
int *p;
if((p=ssave())==NULL) {
printf("Memory allocation error\n");
exit(1);
}
------------------------------------------------------------------------
59
NAME
strblank
DESCRIPTION
Determines if a given string is blank (whitespace).
SYNOPSIS
#include "cxlstr.h"
int strblank(char *str);
INPUTS
str - address of the string to check
RETURN VALUE
A zero if the string is not blank, otherwise it is.
EXAMPLE
char string1[]=" Hello ";
char string2[]=" \n \t \r ";
printf("string1 is %sblank\n",strblank(string1)?"":"not ");
printf("string2 is %sblank\n",strblank(string2)?"":"not ");
------------------------------------------------------------------------
NAME
strbmatch
DESCRIPTION
Returns the best match of a string in an array of strings.
SYNOPSIS
#include "cxlstr.h"
char *strbmatch(char *str,char *strarr[]);
INPUTS
str - address of string to match
strarr - address of array of string pointers. The last pointer in
the array must be NULL.
RETURN VALUE
Address of the string in the array that best matched the given
string.
ALSO SEE
strmatch
EXAMPLE
char *strings[]= { "Hello","There","Computer","World",NULL };
char str1[]="xhelpx";
printf("<%s> best matches <%s>\n",str1,strbmatch(str1,strings));
------------------------------------------------------------------------
NAME
60
strbtrim
DESCRIPTION
Trims both leading and trailing spaces off of a string.
SYNOPSIS
#include "cxlstr.h"
char *strbtrim(char *str);
INPUTS
The address of the string to modify.
RETURN VALUE
The address of the modified string.
ALSO SEE
strltrim strtrim
EXAMPLE
char str[]=" Hello ";
printf("Before: <%s>\n",str);
strbtrim(str);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
strchg
DESCRIPTION
Finds all letters in a string matching one character and replaces
them with another.
SYNOPSIS
#include "cxlstr.h"
int strchg(char *str,int oldch,int newch);
INPUTS
str - address of string to search
oldch - character to search for
newch - character to replace with
RETURN VALUE
The number of matches found.
ALSO SEE
strichg
EXAMPLE
char str[]="Hello, world";
printf("Before: %s\n",str);
strchg(str,'l','z');
printf("After: %s\n",str);
61
------------------------------------------------------------------------
NAME
strchksum
DESCRIPTION
Returns the checksum of a string. The checksum is calculated by
adding up the ASCII values of each character in the string.
SYNOPSIS
#include "cxlstr.h"
unsigned long strchksum(char *str);
INPUTS
str - address of the string
RETURN VALUE
The checksum of the input string.
ALSO SEE
strichksum
EXAMPLE
printf("The checksum of <Hello> is %lu\n",strchksum("Hello"));
------------------------------------------------------------------------
NAME
strcode
DESCRIPTION
Encrypts/decrypts a string. Call this function to encrypt a string,
then call again using the same key to decrypt it. When reading or
writing from a disk file, be sure to open the file in binary mode.
SYNOPSIS
#include "cxlstr.h"
char *strcode(char *str,char *key);
INPUTS
str - the address of the string to encrypt/decrypt
key - the address of the key string to encrypt/decrypt with. The
string can consist of any valid characters (01-FF) and can be
of any length. Remember this key or your data will be lost
forever!
RETURN VALUE
The address of the encrypted/decrypted string.
ALSO SEE
fcrypt
EXAMPLE
char str[]="Hello, world";
62
printf("Before: %s\n",str);
strcode(str,"34&*#Mdq");
printf("Encrypted: %s\n",str);
strcode(str,"34&*#Mdq");
printf("Decrypted: %s\n",str);
------------------------------------------------------------------------
NAME
strdel
DESCRIPTION
Deletes a substring from within a string.
SYNOPSIS
#include "cxlstr.h"
char *strdel(char *substr,char *str);
INPUTS
substr - address of substring to delete
str - address of string to delete substring from
RETURN VALUE
A NULL if the substring was not found, or the address of the
modified string.
ALSO SEE
strdela stridel stridela strinc strins strmid
EXAMPLE
char str[]="Hello there, world";
printf("Before: %s\n",str);
strdel(" there",str);
printf("After: %s\n",str);
------------------------------------------------------------------------
NAME
strdela
DESCRIPTION
Deletes all occurrences of a substring from within a string.
SYNOPSIS
#include "cxlstr.h"
char *strdela(char *substr,char *str);
INPUTS
substr - the address of the substring to search for
str - the address of string to search
RETURN VALUE
The address of the modified string, or a NULL if no matches were
found.
63
ALSO SEE
strdel stridel stridela
EXAMPLE
char str[]="xyzHello, xyzworldxyz";
printf("Before: <%s>\n",str);
strdela("xyz",str);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
strichg
DESCRIPTION
Finds all letters in a string matching one character and replaces
them with another. Ignores case of letters.
SYNOPSIS
#include "cxlstr.h"
int strichg(char *str,int oldch,int newch);
INPUTS
str - address of string to search
oldch - character to search for
newch - character to replace oldch with
RETURN VALUE
The number of matches found.
ALSO SEE
strchg
EXAMPLE
char str[]="HelLo, worLd";
printf("Before: %s\n",str);
strichg(str,'l','l');
printf("After: %s\n",str);
------------------------------------------------------------------------
NAME
strichksum
DESCRIPTION
Returns the checksum of a string. The checksum is calculated by
adding up the ASCII values of each character in the string. All
lowercase letters will be counted as uppercase.
SYNOPSIS
#include "cxlstr.h"
unsigned long strichksum(char *str);
INPUTS
64
str - address of the string
RETURN VALUE
The checksum of the input string.
ALSO SEE
strchksum
EXAMPLE
printf("The checksum of <Hello> is %lu\n",strichksum("Hello"));
------------------------------------------------------------------------
NAME
stridel
DESCRIPTION
Deletes a substring from within a string. Ignores case of letters.
SYNOPSIS
#include "cxlstr.h"
char *stridel(char *substr,char *str);
INPUTS
substr - address of substring to delete
str - address of string to delete substring from
RETURN VALUE
A NULL if the substring was not found, or the address of the
modified string.
ALSO SEE
strdel strdela stridela striinc
EXAMPLE
char str[]="Hello tHeRe, world";
printf("Before: %s\n",str);
stridel(" ThErE",str);
printf("After: %s\n",str);
------------------------------------------------------------------------
NAME
stridela
DESCRIPTION
Deletes all occurrences of a substring from within a string.
Ignores case of letters.
SYNOPSIS
#include "cxlstr.h"
char *stridela(char *substr,char *str);
INPUTS
65
substr - the address of the substring to search for
str - the address of string to search
RETURN VALUE
The address of the modified string, or a NULL if no matches were
found.
ALSO SEE
strdel strdela stridel
EXAMPLE
char str[]="XyZHello, xYzworldXyZ";
printf("Before: <%s>\n",str);
strdela("xYz",str);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
striinc
DESCRIPTION
Determines if and where one string is included within another.
Ignores case of letters.
SYNOPSIS
#include "cxlstr.h"
char *striinc(char *str1,char *str2);
INPUTS
str1 - address of the string to search for
str2 - address of the string to search
RETURN VALUE
The address where string1 is included in string2, or a NULL if
string1 is not included in string2.
ALSO SEE
strinc strmid
EXAMPLE
char str[]="Hello, world";
printf("<ElLo> is %sincluded in <%s>\n"
,striinc("ElLo",str)==NULL?"not ":"",str);
------------------------------------------------------------------------
NAME
strinc
DESCRIPTION
Determines if and where one string is included within another.
SYNOPSIS
66
#include "cxlstr.h"
char *strinc(char *str1,char *str2);
INPUTS
str1 - address of the string to search for
str2 - address of the string to search
RETURN VALUE
The address where string1 is included in string2, or a NULL if
string1 is not included in string2.
ALSO SEE
striinc strmid
EXAMPLE
char str[]="Hello, world";
printf("<ElLo> is %sincluded in <%s>\n"
,strinc("ElLo",str)==NULL?"not ":"",str);
------------------------------------------------------------------------
NAME
strins
DESCRIPTION
Inserts one string into another.
SYNOPSIS
#include "cxlstr.h"
char *strins(char *instr,char *str,int st_pos);
INPUTS
instr - the address of the string to insert
str - the address of the string to insert instr into. This area
must be large enough to hold the size of the modified
string.
st_pos - the starting position of where to insert
RETURN VALUE
The address of the modified string.
ALSO SEE
strdel strinc
EXAMPLE
char str[20]="Hello, world";
printf("Before: %s\n",str);
strins(" there",str,5);
printf("After: %s\n",str);
------------------------------------------------------------------------
NAME
striocc
67
DESCRIPTION
Returns the number of occurrences of a character in a string.
Ignores case of letters.
SYNOPSIS
#include "cxlstr.h"
int striocc(char *str,int ch);
INPUTS
str - address of the string to search
ch - the character to look for
RETURN VALUE
The number of occurrences of the character in the string.
ALSO SEE
strocc
EXAMPLE
char str[]="HelLo, world";
printf("There are %d occurrences of '%c' in <%s>\n"
,striocc(str,'l'),'l',str);
------------------------------------------------------------------------
NAME
strischg
DESCRIPTION
Changes all occurrences of one string to another. Ignores case of
letters.
SYNOPSIS
#include "cxlstr.h"
char *strischg(char *str,char *find,char *replace);
INPUTS
str - address of the string to search
find - address of the string to search for
replace - address of the string to replace found strings with
RETURN VALUE
The address of the modified string, or NULL if no matches were
found.
ALSO SEE
strisrep strschg strsrep
EXAMPLE
char str[]="xxxhElLoyyyHElLOzzz";
printf("Before: <%s>\n",str);
strischg(str,"HeLlO","goodbye");
printf("After: <%s>\n",str);
68
------------------------------------------------------------------------
NAME
strisocc
DESCRIPTION
Counts occurrences of one string within another. Ignores case of
letters.
SYNOPSIS
#include "cxlstr.h"
int strisocc(char *str1,char *str2);
INPUTS
str1 - address of string to search for
str2 - address of string to search
RETURN VALUE
The number of times that string str1 occurs in string str2.
ALSO SEE
strsocc
EXAMPLE
char str1[]="hello";
char str2[]="Hello1HELLO2HeLlO3hElLo";
printf("<%s> occurs in <%s> %d times\n",str1,str2
,strisocc(str1,str2));
------------------------------------------------------------------------
NAME
strisrep
DESCRIPTION
Searches for, and replaces one string within another. Ignores case
of letters.
SYNOPSIS
#include "cxlstr.h"
char *strisrep(char *str,char *search,char *replace);
INPUTS
str - address of string to search. This must have enough space
to hold the modified string.
search - address of string to search for
replace - address of string to replace search string with
RETURN VALUE
The address of the modified string, or NULL if the search string
wasn't found.
ALSO SEE
strischg strschg strsrep
69
EXAMPLE
char str[24]="This is a big string";
printf("Before: %s\n",str);
strisrep(str,"StR","th");
printf("After: %s\n",str);
------------------------------------------------------------------------
NAME
strleft
DESCRIPTION
Takes a specified portion of a string from its left and creates a
new string.
SYNOPSIS
#include "cxlstr.h"
char *strleft(char *str,int num_chars);
INPUTS
str - address of input string
num_chars - number of characters to copy
RETURN VALUE
Address of the newly created string or a NULL if a memory allocation
error occurred. Be sure to free() this string if or when you don't
need it anymore.
ALSO SEE
strmid strright strtrim
EXAMPLE
char *p,str[]="Hello, world";
printf("%s\n",p=strleft(str,5));
free(p);
------------------------------------------------------------------------
NAME
strljust
DESCRIPTION
Left justifies a text string.
SYNOPSIS
#include "cxlstr.h"
char *strljust(char *str);
INPUTS
str - address of the string to left justify
RETURN VALUE
Address of the modified string.
70
ALSO SEE
strrjust
EXAMPLE
char str[]=" Hello, world";
printf("Before: <%s>\n",str);
strljust(str);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
strltrim
DESCRIPTION
Trims the leading spaces off of a string.
SYNOPSIS
#include "cxlstr.h"
char *strltrim(char *str);
INPUTS
str - address of the string to trim
RETURN VALUE
Address of the modified string.
ALSO SEE
strbtrim strright strsetsz strtrim
EXAMPLE
char str[]=" Hello, world";
printf("Before: <%s>\n",str);
strltrim(str);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
strmatch
DESCRIPTION
Compares 2 strings and returns a match score.
SYNOPSIS
#include "cxlstr.h"
int strmatch(char *str1,char *str2);
INPUTS
str1 - address of first string
str2 - address of second string
RETURN VALUE
A match score. The higher the score, the better they match.
71
ALSO SEE
strbmatch
------------------------------------------------------------------------
NAME
strmid
DESCRIPTION
Takes a section from input string starting at given position and
taking the given amount of characters creating a new string.
SYNOPSIS
#include "cxlstr.h"
char *strmid(char *str,int st_pos,int num_chars);
INPUTS
str - address of input string
st_pos - position in input string to start copying characters
(starting at position 0)
num_chars - number of characters to copy
RETURN VALUE
Address of the newly created string or a NULL if a memory allocation
error occurred. Be sure to free() the string when or if you are
finished with it.
ALSO SEE
strleft strright
EXAMPLE
char *p,str[]="Hello there, world";
printf("%s\n",p=strmid(str,6,5));
free(p);
------------------------------------------------------------------------
NAME
strocc
DESCRIPTION
Returns the number of occurrences of a given character in a string.
SYNOPSIS
#include "cxlstr.h"
int strocc(char *str,int ch);
INPUTS
str - address of the string to search
ch - the character to look for
RETURN VALUE
The number of occurrences of the given character in the string.
72
ALSO SEE
striocc
EXAMPLE
char str[]="Hello, world";
printf("There are %d occurrences of '%c' in <%s>\n"
,strocc(str,'l'),'l',str);
------------------------------------------------------------------------
NAME
strright
DESCRIPTION
Takes a specifed portion from the right side of a string creating a
new string.
SYNOPSIS
#include <string.h>
#include "cxlstr.h"
char *strright(char *str,int num_chars);
INPUTS
str - address of input string
num_chars - number of characters to copy
RETURN VALUE
Address of the newly created string or a NULL if a memory allocation
error occurred. Be sure to free() the string when or if you are
finished with it.
ALSO SEE
strleft strltrim strmid
EXAMPLE
char *p,str[]="Hello, world";
printf("%s\n",p=strright(str,5));
free(p);
------------------------------------------------------------------------
NAME
strrjust
DESCRIPTION
Right justifies a text string.
SYNOPSIS
#include "cxlstr.h"
char *strrjust(char *str);
INPUTS
str - address of string to right justify
73
RETURN VALUE
Address of modified string.
ALSO SEE
strljust
EXAMPLE
char str[]="Hello, world ";
printf("Before: <%s>\n",str);
strrjust(str);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
strrol
DESCRIPTION
Rotates a string specified number of characters left. The rotated
characters wrap around to the right side of the string.
SYNOPSIS
#include "cxlstr.h"
char *strrol(char *str,int count);
INPUTS
str - the address of the string to rotate
count - number of characters to rotate
RETURN VALUE
The address of the modified string.
ALSO SEE
strror strshl
EXAMPLE
char str[]="Hello, world";
printf("Before: <%s>\n",str);
strrol(str,3);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
strror
DESCRIPTION
Rotates a string specified number of characters right. The rotated
characters wrap around to the left side of the string.
SYNOPSIS
#include "cxlstr.h"
char *strror(char *str,int count);
74
INPUTS
str - the address of the string to rotate
count - number of characters to rotate
RETURN VALUE
The address of the modified string.
ALSO SEE
strrol strshr
EXAMPLE
char str[]="Hello, world";
printf("Before: <%s>\n",str);
strror(str,3);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
strschg
DESCRIPTION
Changes all occurrences of one string to another.
SYNOPSIS
#include "cxlstr.h"
char *strschg(char *str,char *find,char *replace);
INPUTS
str - address of the string to search
find - address of the string to search for
replace - address of the string to replace found strings with
RETURN VALUE
The address of the modified string, or NULL if no matches were
found.
ALSO SEE
strischg strisrep strsrep
EXAMPLE
char str[]="xxxhelloyyyhellozzz";
printf("Before: <%s>\n",str);
strschg(str,"hello","goodbye");
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
strsetsz
DESCRIPTION
Adjusts the length of a string, either by truncation or padding with
spaces.
75
SYNOPSIS
#include "cxlstr.h"
char *strsetsz(char *str,int newsize);
INPUTS
str - address of the string to modify. This area must be large
enough to hold the string at its newsize length.
newsize - the new length of the string
RETURN VALUE
The address of the modified string.
ALSO SEE
strtrim
EXAMPLE
char str[22]="Hello, world";
printf("Before: <%s>\n",str);
strsetsz(str,20);
printf("Len=20: <%s>\n",str);
strsetsz(str,5);
printf("Len=5: <%s>\n",str);
------------------------------------------------------------------------
NAME
strshl
DESCRIPTION
Shifts a string a specified number of characters left. Characters
that shift past the beginning of the string "drop off" and spaces
are added to the right of the string.
SYNOPSIS
#include "cxlstr.h"
char *strshl(char *str,int count);
INPUTS
str - the address of the string to shift
count - number of characters to shift
RETURN VALUE
The address of the modifed string.
ALSO SEE
strrol strshr
EXAMPLE
char str[]="Hello, world";
printf("Before: <%s>\n",str);
strshl(str,3);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
76
NAME
strshr
DESCRIPTION
Shifts a string a specified number of characters right. Characters
that shift past the end of the string "drop off" and spaces are
added to the left of the string.
SYNOPSIS
#include "cxlstr.h"
char *strshr(char *str,int count);
INPUTS
str - the address of the string to shift
count - number of characters to shift
RETURN VALUE
The address of the modified string.
ALSO SEE
strror strshl
EXAMPLE
char str[]="Hello, world";
printf("Before: <%s>\n",str);
strshr(str,3);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
strsocc
DESCRIPTION
Counts the occurrences of one string within another.
SYNOPSIS
#include "cxlstr.h"
int strsocc(char *str1,char *str2);
INPUTS
str1 - address of string to search for
str2 - address of string to search
RETURN VALUE
The number of times that string str1 occurs in string str2.
ALSO SEE
strisocc
EXAMPLE
char str1[]="hello";
char str2[]="Hello1hello2HeLlO3hElLo";
printf("<%s> occurs in <%s> %d times\n",str1,str2
77
,strsocc(str1,str2));
------------------------------------------------------------------------
NAME
strsrep
DESCRIPTION
Searches for, and replaces one string within another.
SYNOPSIS
#include "cxlstr.h"
char *strsrep(char *str,char *search,char *replace);
INPUTS
str - address of string to search
search - address of string to search for
replace - address of string to replace search string with
RETURN VALUE
The address of the modified string, or NULL if the search string
wasn't found.
ALSO SEE
strischg strisrep strschg
EXAMPLE
char str[24]="This is a big string";
printf("Before: %s\n",str);
strsrep(str,"str","th");
printf("After: %s\n",str);
------------------------------------------------------------------------
NAME
strtrim
DESCRIPTION
Trims trailing spaces off of a string.
SYNOPSIS
#include "cxlstr.h"
char *strtrim(char *str);
INPUTS
str - address of the string to trim
RETURN VALUE
Address of the modified string.
ALSO SEE
strbtrim strleft strltrim strsetsz
EXAMPLE
78
char str[]="Hello, world ";
printf("Before: <%s>\n",str);
strtrim(str);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
struplow
DESCRIPTION
Converts a string to mixed upper & lowercase characters.
Characters are forced to upper or lowercase depending upon the
previous character in the string.
SYNOPSIS
#include "cxlstr.h"
char *struplow(char *str);
INPUTS
str - the address of the string to convert
RETURN VALUE
The address of the modified string.
ALSO SEE
touplow
EXAMPLE
char str[]="hElLo, wOrLd";
printf("Before: <%s>\n",str);
struplow(str);
printf("After: <%s>\n",str);
------------------------------------------------------------------------
NAME
sysdate
DESCRIPTION
Returns a string containing the current system date.
SYNOPSIS
#include "cxldef.h"
char *sysdate(int dtype);
INPUTS
dtype - date type code. Can be one of the following:
Code Example
---- -------
0 December 3, 1988
1 3 Dec 88
2 12-3-88
3 12/3/88
79
4 3/12/88
5 12/03/88
RETURN VALUE
The address of the static string containing the system date.
ALSO SEE
systime
EXAMPLE
printf("Today's date is %s\n",sysdate(0));
------------------------------------------------------------------------
NAME
systime
DESCRIPTION
Returns a string containing the current system time.
SYNOPSIS
#include "cxldef.h"
char *systime(int ttype);
INPUTS
ttype - time type code. Can be one of the following:
Code Example
---- -------
0 16:30:57.89
1 16:30:57
2 4:30 PM
3 4:30p
4 4:30
5 04:30
RETURN VALUE
The address of the static string containing the current system time.
ALSO SEE
sysdate
EXAMPLE
printf("The current time is %s\n",systime(2));
------------------------------------------------------------------------
NAME
tabstop
DESCRIPTION
Calculates a tab stop from given column and tab width.
SYNOPSIS
#include "cxldef.h"
80
int tabstop(int col,int tabwidth);
INPUTS
col - column
tabwidth - tab width
RETURN VALUE
The next tab stop column.
EXAMPLE
printf("The next tab stop after column 9 is column %d\n"
,tabstop(9,8));
------------------------------------------------------------------------
NAME
timer
DESCRIPTION
Returns the value of the BIOS timer. This value is incremented by
one every 18.2 seconds.
SYNOPSIS
#include "cxldef.h"
unsigned long timer(void);
RETURN VALUE
Current value of the BIOS timer.
ALSO SEE
delay_
EXAMPLE
printf("Time #1: %lu\n",timer());
delay_(36);
printf("Time #2: %lu\n",timer());
------------------------------------------------------------------------
NAME
touplow
DESCRIPTION
Converts a character to upper or lowercase depending on previous
character. This function is used internally by other CXL functions.
SYNOPSIS
#include "cxlstr.h"
int touplow(char *str,char *pos,int ch);
INPUTS
str - address of string
pos - address of current position in string
ch - character to convert
81
RETURN VALUE
The converted character.
ALSO SEE
struplow
EXAMPLE
char ch='w',str[20]="Hello, ";
printf("The character '%c' will be appended to <%s> as '%c'\n"
,ch,str,touplow(str,str+7,ch));
------------------------------------------------------------------------
NAME
videoinit
DESCRIPTION
Initializes CXL's video system. By default, all CXL functions
performing direct screen writes go to the CGA screen memory at
address B800:0000. If you want these functions to work correctly
with a monochrome video adapter or within a DESQview window, you
must call this function. This function sets the values in the global
structure variable _vinfo.
SYNOPSIS
#include "cxlvid.h"
int videoinit(void);
RETURN VALUE
Video adapter type. See the vidtype() description for all the
possible return values.
ALSO SEE
setvparam vidtype
------------------------------------------------------------------------
NAME
vidmode
DESCRIPTION
Returns the current video mode.
SYNOPSIS
#include "cxlvid.h"
int vidmode(void);
RETURN VALUE
The current video mode.
ALSO SEE
mode
------------------------------------------------------------------------
82
NAME
vidtype
DESCRIPTION
Determines the display adapter type.
SYNOPSIS
#include "cxlvid.h"
int vidtype(void);
RETURN VALUE
Video adapter type. Will be one of the following values:
V_NONE - no video adapter
V_MDA - Monochrome Display Adapter
V_EGAMONO - Enhanced Graphics Adapter in mono mode
V_MCGAMONO - Multi-Color Graphics Array adapter in mono mode
V_VGAMONO - Video Graphics Array adapter in mono mode
V_HGC - Hercules Graphics Card
V_HGCPLUS - Hercules Graphics Card Plus
V_INCOLOR - Hercules InColor Card
V_CGA - Color Graphics Adapter
V_EGA - Enhanced Graphics Adapter
V_MCGA - Multi-Color Graphics Array adapter
V_VGA - Video Graphics Array adapter
ALSO SEE
mode setvparam videoinit
------------------------------------------------------------------------
NAME
wactiv
DESCRIPTION
Activates a previously opened window, bringing it "in front" of all
the others. Many windowing functions can perform their operations
only on the active window. If a window is not active, you will need
to activate it before you can use it for these functions.
SYNOPSIS
#include "cxlwin.h"
int wactiv(WINDOW whandle);
INPUTS
whandle - the window handle of the window to activate
RETURN VALUE
W_NOERROR - no error
W_NOTFOUND - window handle not found
W_NOACTIVE - no open windows
ALSO SEE
wisactiv wopen
83
EXAMPLE
int w1,w2;
w1=wopen(10,10,20,40,0,LCYAN|_BLUE,LCYAN|_BLUE);
w2=wopen(0,0,15,35,1,LMAGENTA|_RED,LMAGENTA|_RED);
wactiv(w1);
------------------------------------------------------------------------
NAME
waitkey
DESCRIPTION
Clears the keyboard buffer and halts program execution until a key
is pressed.
SYNOPSIS
#include "cxlkey.h"
int waitkey(void);
RETURN VALUE
The ASCII value of the key pressed.
ALSO SEE
clearkeys getchf waitkeyt
EXAMPLE
printf("Press any key to continue....");
waitkey();
------------------------------------------------------------------------
NAME
waitkeyt
DESCRIPTION
Clears the keyboard buffer and halts program execution until a key
is pressed or the specified time limit expires.
SYNOPSIS
#include "cxlkey.h"
int waitkeyt(int duration);
INPUTS
duration - length of time to wait for keypress (ie. 182 = 10 secs.)
RETURN VALUE
The ASCII value of the key pressed or a -1 if the time limit
expired.
ALSO SEE
clearkeys delay_ getchf waitkey
EXAMPLE
printf("Press any key to continue....");
84
waitkeyt(91); /* time out after 5 seconds */
------------------------------------------------------------------------
NAME
wborder
DESCRIPTION
Changes the active window's border box type. If changing to or from
a borderless window, the window's effective area will change as
well, changing relative coordinates within the window.
SYNOPSIS
#include "cxlwin.h"
int wborder(int btype);
INPUTS
btype - box type. Can be one of the following:
0 - single line border
1 - double line border
2 - single horz, double vert line border
3 - double horz, single vert line border
4 - thick line border
5 - no border (uses spaces for border chars)
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVBTYPE - invalid box type
------------------------------------------------------------------------
NAME
wbox
DESCRIPTION
"Draws" a text box in the active window.
SYNOPSIS
#include "cxlwin.h"
int wbox(int wsrow,int wscol,int werow,int wecol,int btype,
int attr);
INPUTS
wsrow - window start row of box
wscol - window start column of box
werow - window end row of box
wecol - window end column of box
btype - box type. Can be one of the following:
0 - single line border
1 - double line border
2 - single horz, double vert line border
3 - double horz, single vert line border
4 - thick line border
85
5 - no border (uses spaces for border chars)
attr - text attribute to use for box characters
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
ALSO SEE
wfill whline wvline
------------------------------------------------------------------------
NAME
wbprintc
DESCRIPTION
Displays a character on a window's border.
SYNOPSIS
#include "cxlwin.h"
int wbprintc(int bord,int offs,int attr,int ch);
INPUTS
bord - border code. Can be one of the following:
TP_BORD - top border
BT_BORD - bottom border
LT_BORD - left border
RT_BORD - right border
offs - offset from window border to display character at
attr - text attribute for displayed character
ch - the character to display
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_NOBORDER - window has no border
W_INVCOORD - border offset out of range
ALSO SEE
wmessage wprintc
EXAMPLE
wbprintc(RT_BORD,1,WHITE|_BLACK,'*');
------------------------------------------------------------------------
NAME
wcclear
DESCRIPTION
Clears the active window using specified text attribute, then homes
the cursor.
86
SYNOPSIS
#include "cxlwin.h"
int wcclear(int attr);
INPUTS
attr - text attribute to clear window with
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wclear wclreol wclreos wfillch
EXAMPLE
wcclear(BLACK|_BLACK);
------------------------------------------------------------------------
NAME
wcenters
DESCRIPTION
Displays a string centered in active window. Does not recognize
control characters. Does not update cursor position.
SYNOPSIS
#include "cxlwin.h"
int wcenters(int wrow,int attr,char *str);
INPUTS
wrow - window row to center string at
attr - text attribute to use for displayed characters
str - address of string to display
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid window row
W_STRLONG - string too long to be centered in window
ALSO SEE
wprints wrjusts
EXAMPLE
wcenters(2,YELLOW|_LGREY,"Main Menu");
------------------------------------------------------------------------
NAME
wchgattr
DESCRIPTION
Changes the text attribute of the active window. All text within
87
the window will be changed also.
SYNOPSIS
#include "cxlwin.h"
int wchgattr(int battr,int wattr);
INPUTS
battr - the attribute to make the window's border
wattr - the attribute to make the window
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wtextattr
EXAMPLE
wchgattr(LMAGENTA|_RED,LCYAN|_BLUE);
------------------------------------------------------------------------
NAME
wchkbox
DESCRIPTION
Determines whether input window box coordinates are valid for use in
the active window.
SYNOPSIS
#include "cxlwin.h"
int wchkbox(int wsrow,int wscol,int werow,int wecol);
INPUTS
wsrow - window start row
wscol - window start column
werow - window end row
wecol - window end column
RETURN VALUE
Nonzero if input window box coordinates are invalid.
ALSO SEE
wchkcol wchkcoord wchkrow
------------------------------------------------------------------------
NAME
wchkcol
DESCRIPTION
Determines whether input window column coordinate is valid for use
in the active window.
88
SYNOPSIS
#include "cxlwin.h"
int wchkcol(int wcol);
INPUTS
wcol - window column
RETURN VALUE
Nonzero if input window column coordinate is invalid.
ALSO SEE
wchkbox wchkcoord wchkrow
------------------------------------------------------------------------
NAME
wchkcoord
DESCRIPTION
Determines whether input window row,column coordinates are valid for
use in the active window.
SYNOPSIS
#include "cxlwin.h"
int wchkcoord(int wrow,int wcol);
INPUTS
wrow - window row
wcol - window column
RETURN VALUE
Nonzero if input window coordinates are invalid.
ALSO SEE
wchkbox wchkcol wchkrow
------------------------------------------------------------------------
NAME
wchkrow
DESCRIPTION
Determines whether input window row is valid for use in the active
window.
SYNOPSIS
#include "cxlwin.h"
int wchkrow(int wrow);
INPUTS
wrow - window row
RETURN VALUE
Nonzero if input window row is invalid.
89
ALSO SEE
wchkbox wchkcol wchkcoord
------------------------------------------------------------------------
NAME
wclear
DESCRIPTION
Clears the active window, then homes the cursor.
SYNOPSIS
#include "cxlwin.h"
int wclear(void);
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wcclear wclreol wclreos wfillch
------------------------------------------------------------------------
NAME
wclose
DESCRIPTION
Closes the active window. If the window has a shadow, it will be
closed as well.
SYNOPSIS
#include "cxlwin.h"
int wclose(void);
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wcloseall wopen wunlink
------------------------------------------------------------------------
NAME
wcloseall
DESCRIPTION
Closes all open windows.
SYNOPSIS
#include "cxlwin.h"
int wcloseall(void);
90
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wclose wopen
------------------------------------------------------------------------
NAME
wclreol
DESCRIPTION
Clears from the cursor to the end of the active window's line. The
cursor's position is not updated.
SYNOPSIS
#include "cxlwin.h"
int wclreol(void);
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wclear wclreos wfillch
------------------------------------------------------------------------
NAME
wclreos
DESCRIPTION
Clears from the cursor to the end of the active window. The
cursor's position is not updated.
SYNOPSIS
#include "cxlwin.h"
int wclreos(void);
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wclear wclreol wfillch
------------------------------------------------------------------------
NAME
wcopy
DESCRIPTION
Creates a new window duplicating the active window. The new window
91
becomes the active window.
SYNOPSIS
#include "cxlwin.h"
WINDOW wcopy(int nsrow,int nscol);
INPUTS
nsrow - start row of where to place the duplicate window
nscol - start column of where to place the duplicate window
RETURN VALUE
The window handle of the new window. If an error occurred, a zero
will be returned and the global variable _winfo.errno will be set to
one of the following values:
W_ALLOCERR - memory allocation error
W_INVCOORD - invalid coordinates
ALSO SEE
wactiv wmove wopen
EXAMPLE
wopen(10,10,20,40,0,LCYAN|_BLUE,LCYAN|_BLUE);
wcopy(0,0);
------------------------------------------------------------------------
NAME
wdelline
DESCRIPTION
Deletes a line from the active window. Depending upon the input
scroll direction, the lines above or below the line to delete will
scroll to fill in the deleted line in, and a blank line will be
added. If what you really want to do is clear the line, you may
want to use wclreol() instead.
SYNOPSIS
#include "cxlwin.h"
int wdelline(int wrow,int direc);
INPUTS
wrow - window row to delete
direc - scroll direction. Can be one of the following:
D_UP - scroll up
D_DOWN - scroll down
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid window row
ALSO SEE
wclreol winsline wscroll
92
EXAMPLE
wdelline(3,D_UP);
------------------------------------------------------------------------
NAME
wdrag
DESCRIPTION
Smoothly drag active window one row/column in given direction.
SYNOPSIS
#include "cxlwin.h"
int wdrag(int direction);
INPUTS
direction - direction to drag window. Can be one of these values:
D_UP - up
D_DOWN - down
D_LEFT - left
D_RIGHT - right
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_ALLOCERR - memory allocation error
ALSO SEE
wmove wslide
------------------------------------------------------------------------
NAME
wdump
DESCRIPTION
Dumps the active window to the default printer (PRN).
SYNOPSIS
#include "cxlwin.h"
int wdump(void);
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
windump
------------------------------------------------------------------------
NAME
wdupc
93
DESCRIPTION
Displays a character a specified number of times in the active
window. Characters will be displayed in the window's current text
attribute. Control characters are recognized. Cursor position is
updated.
SYNOPSIS
#include "cxlwin.h"
int wdupc(int ch,int count);
INPUTS
ch - character to be displayed
count - number of times to display character
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wdups wputc wtextattr
EXAMPLE
wdupc('X',5);
------------------------------------------------------------------------
NAME
wdups
DESCRIPTION
Displays a string a specified number of times in the active window.
Characters will be displayed in the window's current text attribute.
Control characters are recognized. Cursor position is updated.
SYNOPSIS
#include "cxlwin.h"
int wdups(char *str,int count);
INPUTS
str - character to be displayed
count - number of times to display character
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wdupc wputs wtextattr
EXAMPLE
wdups("Hello ",3);
------------------------------------------------------------------------
94
NAME
werrmsg
DESCRIPTION
Most of CXL's windowing functions set the global variable
_winfo.errno before returning to their caller. This function,
werrmsg(), reads _winfo.errno and returns the literal error message
that corresponds to it. This can be very useful in debugging
programs that use CXL's windowing functions. Check the individual
windowing function descriptions to find out which ones actually set
_winfo.errno.
SYNOPSIS
#include "cxlwin.h"
char *werrmsg(void);
RETURN VALUE
The address of the static string containing the error message that
corresponds to the window error code in _winfo.errno.
ALSO SEE
wperror
EXAMPLE
wgotoxy(255,255); /* invalid coordinates */
printf("Error = %s\n",werrmsg());
------------------------------------------------------------------------
NAME
wfill
DESCRIPTION
Fills in a region of active window with a specified character and
attribute.
SYNOPSIS
#include "cxlwin.h"
int wfill(int wsrow,int wscol,int werow,int wecol,int ch,int attr);
INPUTS
wsrow - window start row
wscol - window start column
werow - window end row
wecol - window end column
ch - character to fill with
attr - text attribute to use for fill
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
ALSO SEE
95
wbox
EXAMPLE
wfill(2,3,5,15,'Z',WHITE|_GREEN);
------------------------------------------------------------------------
NAME
wfillch
DESCRIPTION
Specifies which character the windowing system will use for filling
windows with. By default, it is a space (' ').
SYNOPSIS
#include "cxlwin.h"
void wfillch(int ch);
INPUTS
ch - character to fill with
EXAMPLE
wfillch('\260');
------------------------------------------------------------------------
NAME
wfindrec
DESCRIPTION
Finds the address of a window record using the specified window
handle. This is used internally be several CXL functions.
SYNOPSIS
#include "cxlwin.h"
struct _wrec_t *wfindrec(WINDOW whandle);
INPUTS
whandle - window handle of window record to find
RETURN VALUE
The address of the found window record, or NULL if no record was
found for the given handle.
------------------------------------------------------------------------
NAME
wgetc
DESCRIPTION
Gets a character from the keyboard. Entered character will be
echoed to the active window using the window's current text
attribute. Cursor position is updated.
96
SYNOPSIS
#include "cxlwin.h"
int wgetc(void);
RETURN VALUE
The ASCII value of the key pressed or a zero if an error occurred.
If error, the global variable _winfo.errno will be set to one of the
following:
W_NOACTIVE - no active window
ALSO SEE
wgetchf wscanf wtextattr
------------------------------------------------------------------------
NAME
wgetchf
DESCRIPTION
Gets a character from the keyboard. Allows input only of characters
listed in the string of valid characters. Entered characters will
be echoed to the active window using the text attribute set by the
wtextattr() function. Cursor position is updated. Escape checking
is provided by default. This can be turned off with the wsetesc()
function.
SYNOPSIS
#include "cxlwin.h"
int wgetchf(char *valid,int defchar);
INPUTS
valid - address of the string containing the valid characters
defchar - default selection in case [Enter] is pressed, or a zero
for none
RETURN VALUE
The ASCII value of the key pressed, or a zero if an error occurred.
Thre returned character will be uppercase. If error, the global
variable _winfo.errno will be set to one of the following:
W_NOACTIVE - no active window
W_ESCPRESS - [Esc] key was pressed
ALSO SEE
wgetc wgetyn wscanf wtextattr
EXAMPLE
int ch;
wputs("Quit, are you sure? ");
if((ch=wgetchf("YN",'N'))==0) wprintf("Error: %s\n",werrmsg());
------------------------------------------------------------------------
NAME
wgetns
97
DESCRIPTION
Gets a string from the keyboard, limiting the number of characters
input to the specified length. Entered characters will be echoed to
the active window using the text attribute set by the wtextattr()
function. Cursor position is updated. Escape checking is provided
by default. This can be turned off with the wsetesc() function.
SYNOPSIS
#include "cxlwin.h"
int wgetns(char *str,int maxlen);
INPUTS
str - address of the buffer to receive the input string
maxlen - the maximum length of the input string
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_ESCPRESS - [Esc] key was pressed
ALSO SEE
wgets winputsf wscanf wsetesc wtextattr
EXAMPLE
char buf[6];
wputs("Enter 5 characters: ");
if(wgetns(buf,5)) wprintf("Error: %s\n",werrmsg());
------------------------------------------------------------------------
NAME
wgets
DESCRIPTION
Gets a string from the keyboard. Entered characters will be echoed
to the active window in the text attribute set by the wtextattr()
function. Cursor position is updated.
SYNOPSIS
#include "cxlwin.h"
int wgets(char *str);
INPUTS
str - the address of the buffer to receive the input string
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wgetns winputsf wscanf wtextattr
EXAMPLE
char name[30];
98
wputs("Enter your name: ");
wgets(name);
------------------------------------------------------------------------
NAME
wgetyn
DESCRIPTION
Gets a [Y]es or [N]o response from the keyboard. When the user
chooses [Y]es or [N]o, the text "Yes" or "No" will be displayed at
the cursor location. Escape checking is provided by default. This
can be turned off with the wsetesc() function.
SYNOPSIS
#include "cxlwin.h"
int wgetyn(int cdefault);
INPUTS
cdefault - the response that will be automatically selected when the
[Enter] key is pressed. Zero = No, Nonzero = Yes.
RETURN VALUE
A 'Y' if Yes was selected, an 'N' if No was selected, or a '\0' if
the user pressed [Esc] and Escape checking was on.
ALSO SEE
wgetchf wsetesc
EXAMPLE
int choice;
wputs("Delete, are you sure? [Y,n]: ");
choice=wgetyn(1);
if(choice)
wprintf("\nYou selected: %c\n",choice);
else
wprintf("\n[Esc] was pressed\n");
------------------------------------------------------------------------
NAME
wgotoxy
DESCRIPTION
Sets cursor coordinates within the active window.
SYNOPSIS
#include "cxlwin.h"
int wgotoxy(int wrow,int wcol);
INPUTS
wrow - window row (Y coordinate)
wcol - window column (X coordinate)
99
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
ALSO SEE
wpgotoxy wreadcur
------------------------------------------------------------------------
NAME
whandle
DESCRIPTION
Returns the window handle of the active window.
SYNOPSIS
#include "cxlwin.h"
WINDOW whandle(void);
RETURN VALUE
The handle of the active window or zero if error. If error, the
global variable _winfo.errno will be set to one of the following:
W_NOACTIVE - no active window
ALSO SEE
wactiv wisactiv
------------------------------------------------------------------------
Context-Sensitive Help Functions
CXL's context-sensitive help system operates on the principle of a
current help category and a help category stack. Both require some
explaining before you begin to use them.
The current help category is the one that will be used when the user
presses the help key. It can be set by one of several ways. The direct
way is for you to explicitly set it by calling whelpcat(). There are
also indirect ways that the current help category can be set. Windows,
input fields, and menu items each have individual help categories as
part of their record. If you were to activate a window which has its
own help category, then that would become the current help category.
During the processing of input fields and menus, each time you move to a
new field or menu item item, the current help category is set to the
whatever the field/item's help category is, even if that category is
zero (empty). This means that input forms and menus overwrite what was
in the current help category before the form/menu began processing.
To keep from losing the current help category during the processing of
forms and menus, you need to be able to save the current help category
during that period. This is where the help stack comes into the
picture. To save the current help category, you push it onto the stack
with whelpush(). When you need to retrieve it, you pop it back off of
100
the stack using whelpop(). The category popped off of the stack then
becomes the current help category. This help stack is a LIFO (Last In
First Out) stack and holds up to 20 help categories.
When the help key is pressed by the user, CXL's help processor will
search the help file for the current help category. If the current help
category is zero (empty), then the help category off top of the stack
will be used. This is where the help stack comes in handy. It allows
you to have a "background" help category for menu items and fields that
don't have help categories of their own. Before processing of the form
or menu, you simply push the background help category onto the stack.
When the help category is found in the help file, the corresponding help
text will be displayed on the screen in the help window. If there is
more than 1 page of text, the user can change between pages via the
[PgUp]/[PgDn] keys. If there are cross-reference items, the user can
use the arrow keys to move between them, and use [Enter] to select.
Pressing [Esc] will exit the help window.
During help processing, all keys attached to functions via setonkey()
will be disabled to avoid conflict with the help system. If you wish to
have defined keys available during help processing, you can define them
using setonkey() in the "open" function specified in the whelpdef()
function. If you define any keys in the "open" function, you will not
need to worry about freeing them as the help processor will free any
user-defined keys before exiting help.
The size and placement of the help window are adjustable. The help
window size by default is 19 rows by 64 columns centered on the screen.
This can be changed using whelpwin(). The whelpwin() function sets the
screen coordinates to be used when opening the help window and can be
called any time after whelpdef(). If you ever want to disengage the
help system, just call whelpundef().
Creating help files is quite easy. You need to have an ASCII editor to
create them with. Your help file can contain several help categories.
Here is an example of a couple of defined help categories:
*B 1,Help Category 1
help text help text help text
help text help text help text
help text help text help text
*P
help text help text help text
help text help text help text
help text help text help text
*E
*B 2,Help Category 2
help text help text help text
help text help text help text
help text help text help text
*P
help text help text help text
101
help text help text help text
help text help text help text
Also see: ^Help Category 1^
*E
The "*B" indicator specifies the beginning of a help category. The
format is "*B helpcatnumber[,helpcatname]". The help category number is
the number of the help category that you set using whelpcat(). There
should be only one space between the "*B" and the help category number.
The help category name is only required for cross-references. If there
are no cross-references to that help category, then you can leave the
helpcatname parameter out.
The "*P" indicator specifies a page break and is optional. You may have
as many page breaks as you'd like. The "*E" indicator specifies the end
of the help category. The "*B", "*P", and "*E" indicators must all
begin in the first column. These indicators and the help category name
are case insensitive (can be in lowercase, uppercase, or mixed).
CXL represents help categories as integers. When assigning help
category numbers in the help file, you should start at 1 and go up from
there. Help category 0 is reserved to represent an empty help category.
In the definition of Help Category 2, you will notice the cross-
reference to Help Category 1. All cross-referencing is done by
embedding the cross-reference category name (not number) inside carats
(^). If you need to display a carat inside the help file, use a double
carat (^^).
Any text contained outside of the "*B" and "*E" will be treated as
comments. If an "*E" is not found, then the end-of-file will be treated
as an "*E".
Now, you need to "compile" your ASCII help file into an indexed file.
There is utility, MAKEINDX.COM, which takes your ASCII help file as
input, and outputs an indexed version of of the same file. This new
file is the actual help file that you specify in the whelpdef()
function. Keep the ASCII help file around so you will be able to make
modifications.
------------------------------------------------------------------------
NAME
whelpcat
DESCRIPTION
Sets the current help category. If a window is active at the time,
it will also set that window's help category. The help category set
by calling this function is what will be used by the help processor
for searching the help file for help text.
SYNOPSIS
#include "cxlwin.h"
int whelpcat(int cat);
102
INPUTS
cat - help category number.
RETURN VALUE
W_NOERROR - no error
W_NOHLPDEF - no help record defined
ALSO SEE
whelpclr whelpdef whelpop whelppcat whelpush
------------------------------------------------------------------------
NAME
whelpclr
DESCRIPTION
Clears the help category stack.
SYNOPSIS
#include "cxlwin.h"
int whelpclr(void);
RETURN VALUE
W_NOERROR - no error
W_NOHLPDEF - no help defined
ALSO SEE
whelpdef whelpcat whelpop whelpush
------------------------------------------------------------------------
NAME
whelpdef
DESCRIPTION
Defines the help file, key, and window colors. After calling this
function, anytime the help key is pressed, the help processor will
search the help file for whatever the current help category is.
SYNOPSIS
#include "cxlwin.h"
int whelpdef(char *file,unsigned key,int winattr,int textattr,
int selattr,int barattr,void (*open)(void));
INPUTS
file - address of string containing help file name.
key - keycode of key to be used for help key. See Appendix B
for a list of keycodes that you can use.
winattr - attribute of the help window.
textattr - attribute of the text in the help window.
selattr - attribute of the cross-reference selection text.
barattr - attribute of the cross-reference selection bar.
open - address of the function to call immediately upon opening
of the help window. This can be used to call a function
103
that could add a window shadow, etc. If you do not need
to use this feature, specify NULL.
RETURN VALUE
W_NOERROR - no error
W_ALLOCERR - memory allocation error
W_NOHLPDEF - you specified NULL for the help file name
ALSO SEE
whelpcat whelpundef whelpwin
EXAMPLE
whelpdef("CXLDEMO.HLP",0x3b00,LCYAN|_BLUE,GREEN|_BLUE,LGREEN|_BLUE
,BLUE|_LGREY,NULL);
------------------------------------------------------------------------
NAME
whelpop
DESCRIPTION
Pops the help category off of the top of the stack and makes it the
current help category.
SYNOPSIS
#include "cxlwin.h"
int whelpop(void);
RETURN VALUE
W_NOERROR - no error
W_NOHLPDEF - no defined help, see whelpdef().
W_HLPSTKUN - help stack underflow (stack empty).
ALSO SEE
whelpcat whelpclr whelpdef whelpopc whelpush whelpushc
------------------------------------------------------------------------
NAME
whelpopc
DESCRIPTION
Pops the help category off of the top of the stack and into the
void. The current help category is not affected.
SYNOPSIS
#include "cxlwin.h"
int whelpopc(void);
RETURN VALUE
W_NOERROR - no error
W_NOHLPDEF - no defined help, see whelpdef().
W_HLPSTKUN - help stack underflow (stack empty).
104
ALSO SEE
whelpcat whelpclr whelpdef whelpop whelpush whelpushc
------------------------------------------------------------------------
NAME
whelppcat
DESCRIPTION
Pushes the current help category onto the help category stack, then
sets the current help category to the specified help category. It's
effectively the same as doing a whelpush() followed by a whelpcat().
SYNOPSIS
#include "cxlwin.h"
int whelppcat(int cat);
INPUTS
cat - help category number of the help category you want to make
the current help category.
RETURN VALUE
W_NOERROR - no error
W_NOHLPDEF - no help record defined
W_HLPSTKOV - help stack overflow (stack full)
ALSO SEE
whelpcat whelpush whelpushc
------------------------------------------------------------------------
NAME
whelpush
DESCRIPTION
Pushes the current help category onto the help category stack. The
stack can hold up to 20 help categories.
SYNOPSIS
#include "cxlwin.h"
int whelpush(void);
RETURN VALUE
W_NOERROR - no error
W_NOHLPDEF - no defined help. See whelpdef().
W_HLPSTKOV - help stack overflow (stack full).
ALSO SEE
whelpcat whelpclr whelpdef whelpop whelppcat whelpushc
------------------------------------------------------------------------
NAME
whelpushc
105
DESCRIPTION
Pushes the specified help category onto the help category stack.
The current help category is not affected. The stack can hold up to
20 help categories.
SYNOPSIS
#include "cxlwin.h"
int whelpushc(int cat);
INPUTS
cat - help category number to push onto help category stack.
RETURN VALUE
W_NOERROR - no error
W_NOHLPDEF - no defined help. See whelpdef().
W_HLPSTKOV - help stack overflow (stack full).
ALSO SEE
whelpclr whelpdef whelpop whelpopc whelppcat whelpush
------------------------------------------------------------------------
NAME
whelpundef
DESCRIPTION
Disengages the help system. This un-defines the help key, clears
the help stack, and frees any memory allocated by the help system.
SYNOPSIS
#include "cxlwin.h"
int whelpundef(void);
RETURN VALUE
W_NOERROR - no error
W_NOHLPDEF - no help defined. See whelpdef().
ALSE SEE
whelpdef
------------------------------------------------------------------------
NAME
whelpwin
DESCRIPTION
Sets specific features to be used by the help window for when it
opens. These are screen coordinates, border type, and whether or not
to display a "Help" title on the upper window border. It does not
actually open the help window. You can call whelpwin() anytime
after calling whelpdef(). You can call whelpwin() as often as you
like during your program.
SYNOPSIS
106
#include "cxlwin.h"
int whelpwin(int srow,int scol,int erow,int ecol,int btype,
int title);
INPUTS
srow - start row to be used for help window
scol - start column to be used for help window
erow - end row to be used for help window
ecol - end column to be used for help window
btype - box type (0-5) to be used for help window
title - display "Help" title on top border? (0=no, 1=yes)
RETURN
W_NOERROR - no error
W_NOHLPDEF - no help defined, see whelpdef()
ALSO SEE
whelpdef
------------------------------------------------------------------------
NAME
whide
DESCRIPTION
Hides the active window. The next window becomes active.
SYNOPSIS
#include "cxlwin.h"
int whide(void);
RETURN VALUE
W_NOERROR - no error
W_ALLOCERR - memory allocation error
W_NOACTIVE - no active window
ALSO SEE
whandle wunhide
------------------------------------------------------------------------
NAME
whline
DESCRIPTION
"Draws" a horizontal text line in active window using characters
defined by given box type. If horizontal line crosses a vertical
line of the same box type, an appropriate intersection or corner
will be used.
SYNOPSIS
#include "cxlwin.h"
int whline(int wsrow,int wscol,int count,int btype,int attr);
107
INPUTS
wsrow - window start row
wscol - window start column
count - number of line characters to display
btype - box type. Can be one of the following:
0 - single line
1 - double line
2 - single horz, double vert line
3 - double horz, single vert line
4 - thick line
5 - uses spaces for line chars
attr - text attribute to use for the line
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - text line too long for window
W_INVBTYPE - invalid box type
ALSO SEE
wvline
EXAMPLE
whline(1,0,5,LMAGENTA|_BLACK);
------------------------------------------------------------------------
NAME
windowat
DESCRIPTION
Returns the handle of the window at given screen row,column
coordinates.
SYNOPSIS
#include "cxlwin.h"
WINDOW windowat(int row,int col);
INPUTS
row - screen row
col - screen column
RETURN VALUE
The window handle of the window found at given coordinates. If an
error occurred, zero will be returned and _winfo.errno will be set
to one of the following:
W_NOACTIVE - no active window
W_NOTFOUND - no window found at given screen coordinates
ALSO SEE
whandle
------------------------------------------------------------------------
108
NAME
windump
DESCRIPTION
Dumps a screen window to the printer (PRN).
SYNOPSIS
#include "cxlprn.h"
void windump(int srow,int scol,int erow,int ecol);
INPUTS
srow - start row
scol - start column
erow - end row
ecol - end column
ALSO SEE
wdump
EXAMPLE
windump(0,0,9,79); /* prints top 10 lines of screen */
------------------------------------------------------------------------
Multi-Field Input Functions
Three functions are needed to process multi-field formatted input from
windows: winpbeg(), winpdef(), and winpread(). The winpbeg() function
marks the start of an input form. The winpdef() function defines an
input field and is called for each input field to be defined. The
winpread() function marks the end of the input form and processes all
defined fields. The formatted input capabilities are much like those of
the inputsf() and winputsf() functions. The major difference is that
with the winpbeg()/winpdef()/winpread() combination, you can edit back
and forth between fields before finally accepting the input.
For every input field you want to define, you must call winpdef(). This
will allocate memory to hold the input record information. The first two
parameters, wrow and wcol, specify where in the active window the field
will be loaded.
The next parameter, str, is the address of the string buffer to receive
the input data. The edited string will be terminated with a '\0'. This
means if your format string is "AAAAA", your receiving field must be
string[6] to hold the terminating '\0'. You can edit numeric
information as well. There are 4 conversion functions to convert numbers
to/from CXL fields:
cvtic() - convert integer to CXL field string
cvtci() - convert CXL field string to integer
cvtfc() - convert real number to CXL field string
cvtcf() - convert CXL field string to real number
The next parameter, format, is the input field format string. It
109
controls how each character is input and how large the input field will
be. It consists of 1 or more format characters, and may have displayed
text in between any of the format control characters. You may use
spaces in between the format control characters for readability. Valid
format control characters are listed in the "Formatted Keyboard Input
Functions" section. The case of the format control characters must be
as shown. You can also specify a decimal point in the field. Format
strings for winpdef() are just like those of inputsf() and winputsf()
except there are no command toggles.
The next parameter in the winpdef() function is fconv. These are
similar to the command toggles of inputsf() and winputsf() except that
the fconv character applies conversion to the whole field. Valid fconv
characters are:
0 - apply no conversion
'L' - convert letters to lowercase
'M' - convert letters to mixed upper & lowercase
'P' - password field (do not echo characters)
'U' - convert letters to uppercase
'9' - numeric field (right justify, space fill to the left of
the decimal; and left justify, zero fill to the right of
the decimal.
After the fconv parameter comes the mode parameter. This parameter
allows you to specify if the input field is going to create new data or
update old data. If the mode parameter is 0, then the input field
will be used for entering new data. If the mode parameter is nonzero,
then the input field will be used to update the old data contained in
the str parameter. If you specify 2 for mode, the cursor will appear
at the end of the line and if an editing key is pressed first, the field
will be used for updating, otherwise the field will be used to create
new information. If you do choose to update, then the length of the
input str will be adjusted to the field size either by truncation or
padding with spaces.
The next parameter in the winpdef() function is validate. This
parameter is the address of an optional field validation function. On
exit of each field, winpread() will call this function to validate it.
You can use this function for validating, modifying, displaying error
messages, or just about anything. This must function accept a pointer
to char for input and return either 0 for no error, or the position in
the field where the error occurred (starting with 1). If no validation
function is to be used, then specify NULL. Here's an example field
validation function that checks for embedded spaces:
int check_field_for_embedded_spaces(char *input_field)
{
int current_position=1,error_position=0;
/* search for end of text */
while(*input_field++!=' ') current_position++;
/* search to end of field for non-space characters */
while(*input_field==' ') {
110
current_position++;
input_field++;
}
/* if at not end of field, then field is invalid */
if(*input_field!='\0') error_position=current_position;
return(error_position);
}
The final parameter to winpdef(), help, is the help category number to
assign to this menu item. This is useful if you are using the
context-sensitive help system and you want to assign a different help
category to each field. If you do not need to use this feature, specify
0 for this parameter.
The winpdef() function will return one of the following values:
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
W_ALLOCERR - memory allocation error
W_NOFRMBEG - no begin of form specified (winpbeg() not called)
W_INVFORMT - invalid format string (syntax error)
Once you have defined all input fields with winpdef(), you call
winpread() to process them. The user is allowed to move around and edit
all of the fields. The input fields are validated on the fly and after
entering the last field. Valid editing keys are listed in Appendix E.
After the winpread() function returns, all fields defined with winpdef()
will be cleared. The receiving strings of all defined fields will now
contain the data entered. If Escape checking was on and [Esc] was
pressed, then all receiving strings will contain the values they held
before winpread() was called and W_ESCPRESS will be returned.
The general structure for defining input fields looks like:
winpbeg(...);
winpdef(...);
winpdef(...);
winpdef(...);
winpread();
Sometimes, you may have a need to extend or modify the data entry keys used
by winpread() during processing of the fields. There is a function,
winpkey(), that enables this. What winpkey() does is defines a function
to be used as the alternate get-key function so that during winpread()
processing you can get a key, test it, change it, or do whatever else
you like with it before you return it to winpread(). It also lets you
to specify a variable to receive the key that caused termination of the
form. The call to winpkey() can be contained anywhere between winpbeg()
and winpread().
Often, when dealing with database records, users would like to have
[PgUp] mean previous record and [PgDn] mean next record. Let's also say
111
that we want to use [F10] as the normal exit key instead of the
currently defined [Ctrl-Enter]. Here is an example of an alternate
get-key function would handle this:
unsigned get_key(int *done)
{
unsigned int key;
key=getxch();
/* if key was [F10], change it to [Ctrl-Enter] */
if(key=0x4400) key=0x1c0a;
/* if key was [PgUp] or [PgDn], set done flag on */
if(key==0x4900 || key==0x5100) *done=TRUE;
return(key);
}
In your code, where you define your form, you use winpkey() to tell CXL
of the alternate get-key function's existance and specify which variable
to hold the keypress of the termination key. Here's something how it
would look in your program:
unsigned key_that_terminated_form;
/*...define window, begin of form, and all fields...*/
winpkey(get_key,&key_that_terminated_form);
winpread();
switch(key_that_terminated_form) {
case 0x4900:
/* [PgUp] */
case 0x5100:
/* [PgDn] */
case 0x1c0d:
case 0x1c0a:
/* [Enter] or [Ctrl-Enter] (aka [F10]) */
case 0x011b:
/* [Esc] */
}
------------------------------------------------------------------------
NAME
winpbeg
DESCRIPTION
Marks the beginning of a data input form, and specifies text
attributes to be used by the form.
SYNOPSIS
#include "cxlwin.h"
int winpbeg(int fieldattr,int textattr);
INPUTS
fieldattr - field attribute
textattr - text attribute
112
RETURN VALUE
W_NOERROR - no error
W_ALLOCERR - memory allocation error
W_NOACTIVE - no active window
ALSO SEE
winpdef winpread
------------------------------------------------------------------------
NAME
winpdef
DESCRIPTION
Defines a window input field.
SYNOPSIS
#include "cxlwin.h"
int winpdef(int wrow,int wcol,char *str,char *format,int fconv,
int mode,int (*validate) (char *),int help);
INPUTS
wrow - start of input, window's row coordinate
wcol - start of input, window's column coordinate
str - address of string buffer to receive input
format - address of field format string. See Appendix D for valid
format string characters.
fconv - input field conversion character. Applies conversion to
all characters in the input field. Can be one of the
following:
0 - apply no conversion
'L' - convert letters to lowercase
'M' - convert letters to mixed case
'P' - password field (no echo)
'U' - convert letters to uppercase
'9' - numeric field
mode - field mode
0 - initial data entry
1 - update existing data
2 - conditional update
validate - address of your user validation/modification function.
If you do not wish to have a field validation function,
then specify NULL.
help - help category number to be associated with this input
field. Specify 0 if no help category is to be assigned.
RETURN VALUE
W_NOERROR - no error
W_ALLOCERR - memory allocation error
W_NOFRMBEG - no begin of form specified, see winpbeg()
W_INVCOORD - invalid coordinates
W_INVFORMT - invalid format string
ALSO SEE
113
winpbeg winpread
------------------------------------------------------------------------
NAME
winpfba
DESCRIPTION
Assigns "before" and "after" function pointers to the input field
just defined. The call to this function must appear immediately
after the call to the winpdef() to which it relates. During user
input, when the user enters the field, the before function gets
called. When the user leaves the validated field, the after
function gets called. This powerful feature allows you to do some
pretty advanced stuff with input fields, but must be used very
carefully.
SYNOPSIS
#include "cxlwin.h"
int winpfba(void (*before)(void),void (*after)(void));
INPUTS
before - address of the before function. If you do not wish to
define a before function, specify NULL.
after - address of the after function. If you do not wish to
define an after function, specify NULL.
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_NOFRMBEG - no begin of form defined. See winpbeg().
W_NOINPDEF - no input fields defined. See winpdef().
ALSO SEE
winpbeg winpdef winpread
------------------------------------------------------------------------
NAME
winpfcurr
DESCRIPTION
Returns the address of the current input field's record. After the
call to this function, you may access any of the current input
field's elements. See the definition of struct _field_t in the
CXLWIN.H file for all of the elements you may use. Use caution when
updating elements in the field's record. This function should only
be called while the input form to which it relates is being
processed.
SYNOPSIS
#include "cxlwin.h"
struct _field_t *winpfcurr(void);
114
RETURN VALUE
The address of the current input field's record. You can access
individual elements of the field's record by using this address and
the C pointer operator "->". This function is a macro with no error
checking, and will most likely return an invalid value if there
isn't an active form.
ALSO SEE
winpbeg winpdef winpffind winpread
EXAMPLE
printf("Length of current input field is: %d\n"
,winpfcurr()->lenfld);
------------------------------------------------------------------------
NAME
winpffind
DESCRIPTION
Searches for a defined field whose window coordinates match the
input coordinates, then returns the address of the field's record.
After the call to this function, you may access any of the found
input field's elements. See the definition of struct _field_t in
the CXLWIN.H file for all of the elements you may use. Use caution
when updating elements in the field's record. This function should
only be called during the processing of the input form to which it
relates.
SYNOPSIS
#include "cxlwin.h"
struct _field_t *winpffind(int wrow,int wcol);
INPUTS
wrow - window row of field to search for
wcol - window column of field to search for
RETURN VALUE
The address of the found field's record. You can access individual
elements of the field's record by using this address and the C
pointer operator "->". If an error occurred, then NULL will be
returned and _winfo.errno will be set to one of the following
values:
W_NOACTIVE - no active window
W_NOFRMDEF - no form defined. See winpbeg().
W_NOTFOUND - no defined field matches input window coordinates
ALSO SEE
winpbeg winpdef winpfcurr winpread
------------------------------------------------------------------------
NAME
winpkey
115
DESCRIPTION
Allows you to extend or modify the data entry keys used as the
alternate get-key function so that during winpread() processing you
can get a key, test it, change it, or do whatever else you like with
it before you return it to winpread(). It also lets you specify a
variable to receive the key that caused termination of the form. The
call to winpkey() can be contained anywhere between winpbeg() and
winpread().
SYNOPSIS
#include "cxlwin.h"
int winpkey(unsigned (*getkey)(int *),unsigned *termkey);
INPUTS
getkey - address of the function to be used as the alternate
get-key function.
termkey - address of the unsigned integer which will receive
the keycode of the key that will terminate the form.
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active form
W_NOFRMBEG - no begin of form specified. See winpbeg().
ALSO SEE
winpread
------------------------------------------------------------------------
NAME
winpread
DESCRIPTION
Marks the end of the defined input form and initiates processing of
the defined input fields. The user is allowed to edit back and
forth between the defined fields until the last field is entered.
Valid editing keys are listed in Appendix E.
SYNOPSIS
#include "cxlwin.h"
int winpread(void);
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_ESCPRESS - [Esc] key was pressed (only if Escape checking was on)
W_NOINPDEF - no input fields defined
ALSO SEE
winpdef winpkey wsetesc
------------------------------------------------------------------------
NAME
116
winputsf
DESCRIPTION
Inputs a formatted string from the keyboard. Typed-in characters
will be echoed to the active window in the current text attribute.
This function provides an extremely powerful method of accept
single-line input from the user. You can limit input characters to
certain characters of a type, such as numbers, insert strings in
between typed in characters, create custom prompts, disable [Enter]
until the field is filled, and more. Provides Escape checking.
Updates cursor position.
SYNOPSIS
#include "cxlwin.h"
int winputsf(char *str,char *fmt);
INPUTS
str - address of the allocated space to receive string
fmt - address of the format string. See Appendix D for valid format
string characters.
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_ESCPRESS - [Esc] key was pressed
W_INVFORMT - invalid format string
ALSO SEE
wgetns wgets wscanf wsetesc wtextattr
EXAMPLE
char buf[10];
if(winputsf(buf,"'Enter phone nr: '!R--!'('!+!###!-!') '!+!###"
"!-!'-'!+!####")) wprintf("Error: %s\n",werrmsg());
------------------------------------------------------------------------
NAME
winsline
DESCRIPTION
Inserts a blank line in the active window. Depending upon the input
scroll direction, lines will shift up or down to make room for the
new line.
SYNOPSIS
#include "cxlwin.h"
int winsline(int wrow,int direc);
INPUTS
wrow - window row to insert at
direc - scroll direction:
D_UP - scroll up
D_DOWN - scroll down
117
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid window row
ALSO SEE
wdelline wscroll
------------------------------------------------------------------------
NAME
wintodisk
DESCRIPTION
Copies a window of the screen to a disk file.
SYNOPSIS
#include "cxlvid.h"
int wintodisk(int srow,int scol,int erow,int ecol,char *fname);
INPUTS
srow - start row of window
scol - start column of window
erow - end row of window
ecol - end column of window
fname - address of the string containing the filename of the file to
write to
RETURN VALUE
Nonzero if an error occurred.
ALSO SEE
disktoscrn disktowin scrntodisk
EXAMPLE
wintodisk(10,10,20,40,"WINDOW.SAV");
------------------------------------------------------------------------
NAME
wisactiv
DESCRIPTION
Determines if the specified window is active.
SYNOPSIS
#include "cxlwin.h"
int wisactiv(WINDOW whandle);
INPUTS
whandle - the window handle of the window to check.
RETURN VALUE
Nonzero if specified window is active.
118
ALSO SEE
wactiv whandle
------------------------------------------------------------------------
Bar Menu Functions
To use CXL's menuing system, you must be familiar with the process of
defining menus. There are several functions associated with the
defining of menus. These functions must appear in your source code in a
certain order. Menu structures can be defined as simple as a one-level
pop-up menu, or as complex as a multi-level pull-down menu system. The
basic format of all menu structures is:
<wmenubeg|wmenubegc>
wmenuitem
[wmenuitxt]
[wmenuiba]
[<wmenubeg|wmenubegc>...]
[wmenuitem...]
wmenuend
wmenuget
Either wmenubeg() or wmenubegc() is required to mark the start of a
menu, wmenuitem() is required to define menu items, wmenuend() is
required to mark the end of a menu, and wmenuget() initiates user
processing of the entire menu structure.
Notice that you can also define entire menus underneath any individual
menu item. This allows you to easily create nested menus to aid in
building complex pull-down and multi-layered menuing systems. There is
no limit to how deep you can nest sub-menus, with the exception of
available memory.
When coding multi-level menu systems, it is a good idea to use indenting
as shown above to help you distinguish which menu items and menu-ends go
with which menu-begins.
wmenuitxt() and wmenuiba() are optional functions. They allow you to
add specific features to a menu item. If either of these 2 functions
are used, they must immediately follow the call to wmenuitem() to which
they pertain.
After you define the menu structure and call wmenuget(), the user is
allowed to make a selection. The following editing keys may be used by
the user when processing the menu:
LeftArrow - moves selection bar to item left.
RightArrow - moves selection bar to item right.
UpArrow - moves selection bar to item upwards.
DownArrow - moves selection bar to item downwards. If the current
menu item has a pull-down menu attached, then it will
be opened for processing.
Enter - selects the item that the selection bar is on. If
119
selected item has a sub-menu attached, then processing
of that menu will begin.
Home - moves selection bar to upper-leftmost item.
End - moves selection bar to lower-rightmost item.
Esc - if Escape checking is on, and your are in the root
menu, pressing this cancels input and returns a -1. If
inside a sub-menu, then you will just back up to the
previous menu.
You can also quick-select a menu item by pressing its highlighted
selection character, unless this feature is disabled.
CXL's menuing system also includes built-in mouse support. If you want
to use it, you need to call msinit() somewhere near the beginning of the
program. This will set the mouse support level to MS_KEYS, which allows
the mouse to emulate cursor keys. If you would like a point-and-shoot
selection capability where the user moves the mouse cursor around then
presses the button to select, you must set the mouse support level to
MS_CURS or MS_FULL via mssupport(). In either method of mouse support,
the left mouse button is equivalent to the [Enter] key, and the right
mouse button is equivalent to the [Esc] key.
Each menu item can have a function and/or sub-menu attached to it. When
the user selects the menu item, wmenuget() will first check for an
attached sub-menu. If one exists, it will be processed. Then
wmenuget() will check for a defined select function. If one exists,
then wmenuget() will call it.
This gives you two ways to handle a user selection. The first, as
you've seen, is to have a function attached to the menu item. For
example, if the menu item is "(A)dd Record" and it has a select function
called add_record(), then it will be called upon selecting that menu
item. The other way to handle a user selection is by using a
switch/case to test the return value from wmenuget(). This will only
work properly on single-level menus, but sometimes gives you more
flexibility.
------------------------------------------------------------------------
NAME
wmenubeg
DESCRIPTION
Starts a menu/sub-menu definition and describes the window which the
menu will reside in. This does not actually open any windows or
menus, just defines them. This must be used in conjuction with
wmenuitem() and wmenuend(). This is one of the 4 functions that are
required to process a menu.
SYNOPSIS
#include "cxlwin.h"
int wmenubeg(int srow,int scol,int erow,int ecol,int btype,
int battr,int wattr,void (*open)(void));
120
INPUTS
srow - screen start row of where menu's window will open
scol - screen start column of where menu's window will open
erow - screen end row of where menu's window will open
ecol - screen end column of where menu's window will open
btype - border type. Can be one of the following:
0 - single line
1 - double line
2 - single horizontal, double vertical line
3 - double horizontal, single vertical line
4 - thick line
5 - no border
battr - attribute to be used for the menu window's border. If
btype==5, then this value will be ignored.
wattr - attribute to be used for the menu's window.
open - address of the function to call upon opening of the menu's
window. If you want to add a title, shadow, etc. to the
menu's window after it opens, this lets you specify which
function to call to perform these tasks. Specify NULL if
you don't want to use this feature.
RETURN VALUE
W_NOERROR - no error
W_NOITMDEF - no menu items defined
W_ALLOCERR - memory allocation error
ALSO SEE
wmenubegc wmenuitem wmenuend wmenuget
EXAMPLE
wmenubeg(2,10,9,18,0,YELLOW,_BLUE,NULL);
------------------------------------------------------------------------
NAME
wmenubegc
DESCRIPTION
Starts a menu/sub-menu definition. This is used in place of
wmenubeg(). This function differs from wmenubeg() in that when the
user processes the defined menu, the menu will assume whatever the
active window is at the time.
SYNOPSIS
#include "cxlwin.h"
int wmenubegc(void);
RETURN VALUE
W_NOERROR - no error
W_NOITMDEF - no menu items defined
W_ALLOCERR - memory allocation error
ALSO SEE
wmenubeg wmenuitem wmenuend wmenuget
121
------------------------------------------------------------------------
NAME
wmenuend
DESCRIPTION
Ends a menu/sub-menu definition and defines specific
features/attributes of that menu. This is one of the 4 functions
that are required to process a menu.
SYNOPSIS
#include "cxlwin.h"
int wmenuend(int taginit,int menutype,int barwidth,int textpos,
int textattr,int scharattr,int noselattr,int barattr);
INPUTS
taginit - tag ID of the item that the selection bar will start at.
menutype - a mask which describes how the menu will act. Two or
more menutypes can be combined using the bitwise OR
operator '|'. For example, if the menu you are defining
is to be a pull-down menu, and you want to disable quick
selection, then you would specify M_PD|M_NOQS. Valid
menutypes are:
M_HORZ - horizontal menu
M_VERT - vertical menu
M_OMNI - omnidirectional menu
M_PD - pull-down menu
M_SAVE - save last bar position
M_NOQS - disable quick selection
barwidth - width of the selection bar. If zero is given, then the
selection bar will conform to the width of each menu
item. If a number greater than the width of the window
is given, then the barwidth will be adjusted to its
width.
textpos - offset position from the start of the selection bar that
the menu item text will start. If barwidth==0, then
textpos is ignored.
textattr - attribute to be used for menu text
scharattr - attribute to be used for the quick selection character
noselattr - attribute to be used for nonselectable text
barattr - attribute to be used for the selection bar
RETURN VALUE
W_NOERROR - no error
W_NOITMDEF - no menu items defined
W_INVTAGID - taginit was invalid. It must match one of the tagids
in the current menu.
ALSO SEE
wmenubeg wmenubegc wmenuget wmenuitem
EXAMPLE
wmenuend('F',M_VERT,20,2,YELLOW|_BLUE,LCYAN|_BLUE,LGREY|_BLUE
,BLUE|_LGREY);
122
------------------------------------------------------------------------
NAME
wmenuget
DESCRIPTION
Processes the defined menu structure. The user is allowed to move a
selection bar around to the various menu items. If mouse support is
on, then the user can use the mouse for selecting as well. If
sub-menus exists, then the user can select those also. Escape
checking is provided for when the user is in the root menu, however
if the user is in a sub-menu, pressing [Esc] will always return to
the next level up. This is one of the 4 functions that are required
to process a menu.
SYNOPSIS
#include "cxlwin.h"
int wmenuget(void);
RETURN VALUE
The tag ID of the menu item that was selected in the root menu. If
an error occurred, then -1 will be returned and the global variable
_winfo.errno will be set to one of the following:
W_NOMNUDEF - no menu defined
W_NOMNUEND - no end of menu specified. See wmenuend().
W_ESCPRESS - the [Esc] key was pressed from the root menu
W_ALLOCERR - memory allocation error
W_INVCOORD - invalid coordinates
W_INVBTYPE - invalid box type
ALSO SEE
wmenubeg wmenubegc wmenuend wmenuitem wsetesc
------------------------------------------------------------------------
NAME
wmenuiba
DESCRIPTION
Assigns "before" and "after" function pointers to the menu item just
defined. The call to this function must appear immediately after
the call to the wmenuitem() to which it relates. During the
processing of the menu, when the user moves to the item, the before
function gets called. When the user leaves the item, the after
function gets called. This powerful feature allows you to do some
advanced stuff with menus, but must be used very carefully. One
possible use of wmenuiba() is to define a before function that opens
a window and writes some text in it, and an after function which
closes that window. When the user moved to that menu item, the
window would open up and display text, then when the user left that
menu item, the window would automatically close.
SYNOPSIS
#include "cxlwin.h"
123
int wmenuiba(void (*before)(void),void (*after)(void));
INPUTS
before - address of the before function. If you do not wish to
define a before function, specify NULL.
after - address of the after function. If you do not wish to
define an after function, specify NULL.
RETURN VALUE
W_NOERROR - no error
W_NOITMDEF - no menu items defined. See wmenuitem().
ALSO SEE
wmenubeg wmenuend wmenuget wmenuitem wmenuitxt
------------------------------------------------------------------------
NAME
wmenuicurr
DESCRIPTION
Returns the address of the current menu item's record. After this
call, you may access any of the item's elements. This function
would most likely be called from a "select", "before", or "after"
function. See the struct _item_t definition in the CXLWIN.H file
for all the elements you may use.
SYNOPSIS
#include "cxlwin.h"
struct _item_t *wmenuicurr(void);
RETURN VALUE
The address of the current menu item's record.
ALSO SEE
wmenubeg wmenuend wmenuget wmenuifind wmenuitem wmenumcurr
EXAMPLE
printf("The current menu item's tagid = %d\n",wmenuicurr()->tagid);
------------------------------------------------------------------------
NAME
wmenuidsab
DESCRIPTION
This function disables a menu item by making it nonselectable. This
function would most likely be called from a "select", "before", or
"after" function. It will set a flag so that when the called
function returns to the menu, the disabled menu item will be
displayed in the text attribute defined for nonselectable text.
SYNOPSIS
#include "cxlwin.h"
124
int wmenuidsab(int tagid);
INPUTS
tagid - the tag ID of the menu item to disable
RETURN VALUE
W_NOERROR - no error
W_NOMNUDEF - no menu defined
W_NOTFOUND - tagid not found
ALSO SEE
wmenuienab wmenuinext
------------------------------------------------------------------------
NAME
wmenuienab
DESCRIPTION
This function enables a menu item by making it selectable. This
function would most likely be called from a "select", "before", or
"after" function. It will set a flag so that when the called
function returns to the menu, the enabled menu item will be
displayed in the text attribute defined for selectable text.
SYNOPSIS
#include "cxlwin.h"
int wmenuienab(int tagid);
INPUTS
tagid - the tag ID of the menu item to enable
RETURN VALUE
W_NOERROR - no error
W_NOMNUDEF - no menu defined
W_NOTFOUND - tagid not found
ALSO SEE
wmenuidsab wmenuinext
------------------------------------------------------------------------
NAME
wmenuifind
DESCRIPTION
Searches the menu tree structure for the record of the menu item
matching the input tag identifier, then returns the found record's
address. After the call to this function, you may access any of the
found menu item's elements. See the definition of struct _item_t in
the CXLWIN.H file for all of the elements you may use. Use caution
when updating elements in the menu item's record. This function
should only be called during the processing of the menu to which it
relates.
125
SYNOPSIS
#include "cxlwin.h"
struct _item_t *wmenuifind(int tagid);
INPUTS
tagid - the tag identifier of the menu item to find
RETURN VALUE
The address of the found menu item's record. You can access
individual elements of the menu item's record by using this address
and the C pointer operator "->". If an error occurred, then NULL
will be returned and _winfo.errno will be set to one of the
following values:
W_NOMNUDEF - no menu is defined. See wmenubeg().
W_NOTFOUND - input tag identifier not found
ALSO SEE
wmenubeg wmenuend wmenuget wmenuicurr wmenuitem
------------------------------------------------------------------------
NAME
wmenuinext
DESCRIPTION
Defines which menu item the selection bar will move to next. This
function would most likely be called from a "select", "before", or
"after" function. The selection bar does not actually move until
the called function returns to the menu.
SYNOPSIS
#include "cxlwin.h"
int wmenuinext(int tagid);
INPUTS
tagid - the tag ID of the menu item that you want the selection bar
to move to.
RETURN VALUE
W_NOERROR - no error
W_NOMNUDEF - no menu defined
W_NOTFOUND - tagid not found
ALSO SEE
wmenuidsab wmenuienab
------------------------------------------------------------------------
NAME
wmenuitem
DESCRIPTION
Defines a menu item. This is one of the 4 functions that are
required to process a menu.
126
SYNOPSIS
#include "cxlwin.h"
int wmenuitem(int wrow,int wcol,char *str,int schar,int tagid,
int fmask,void (*select)(void),unsigned hotkey,
int help);
INPUTS
wrow - window row
wcol - window column
str - address of menu item string
schar - quick selection character. This is often the first letter
of the menu item.
tagid - unique tag identifier of this particular menu item. This
is the value that wmenuget() returns upon its selection.
fmask - feature mask. Allows you to define one or more additional
features for this menu item. Valid features are:
M_HASPD - has a pull-down menu attached
M_NOSEL - menu item is not selectable
M_CLOSE - close this menu when item is selected. Menu's
window is closed after the selection function
returns.
M_CLOSB - close this menu when item is selected. Menu's
window is closed before the selection
function is called.
M_CLALL - close all menus when item is selected and the
selection function returns.
More than one feature can be specified by using the C
bitwise OR operator '|'. For example, if this item has a
pull-down menu attached and it is not selectable, you would
specify (M_HASPD|M_NOSEL). Specify 0 if you don't want to
define an fmask for this item.
select - address of the function to call upon selection of this menu
item. Specify NULL if you don't want to define a select
function.
hotkey - keycode of the key, which when pressed, will select this
menu item's function from anywhere within the menu
structure. This allows the user to call this menu item's
select function even if not currently processing its menu.
See Appendix B for a list of keycodes that you can use.
Specify 0 if you don't want to define a hotkey.
help - help category number to be associated with this item.
Specify 0 is you don't want to define a help category for
this item.
RETURN VALUE
W_NOERROR - no error
W_NOMNUBEG - no begin of menu specified. See wmenubeg().
W_ALLOCERR - memory allocation error
ALSO SEE
wmenubeg wmenubegc wmenuend wmenuget wmenuicurr wmenuitxt
EXAMPLE
wmenuitem(0,0,"Load F3",'L',1,M_CLOSE,load_file,0x3d00,0);
127
------------------------------------------------------------------------
NAME
wmenuitxt
DESCRIPTION
Adds a text description to a menu item. You can use this function
to create Lotus-style menus where the text descriptions are
displayed underneath the menu and change each time the user moves to
a new menu item.
SYNOPSIS
#include "cxlwin.h"
int wmenuitxt(int wrow,int wcol,int attr,char *str);
INPUTS
wrow - window row
wcol - window column
attr - text attribute
str - address of description string
RETURN VALUE
W_NOERROR - no error
W_NOITMDEF - no menu items defined
ALSO SEE
wmenuiba wmenuitem
EXAMPLE
wmenuitxt(1,0,LCYAN|_BLUE,"Quit program and return to DOS");
------------------------------------------------------------------------
NAME
wmenumcurr
DESCRIPTION
Returns the address of the currently active menu's record. After
this call, you may access any of the menu's elements. See the
definition of struct _menu_t in the CXLWIN.H file for all of the
elements you may use. Use caution when updating elements in the
menu's record. This function should only be called while the menu to
which it relates is being processed.
SYNOPSIS
#include "cxlwin.h"
struct _menu_t *wmenumcurr(void);
RETURN VALUE
The address of the current menu's record. After you get this
address, you can access the menu's elements via the C pointer
operator "->". There is no error return value - if you call this
function while not processing a menu, then you will more than likely
get an invalid address.
128
ALSO SEE
wmenubeg wmenuend wmenuget wmenuicurr wmenuitem
------------------------------------------------------------------------
NAME
wmessage
DESCRIPTION
Displays text on the top or bottom border of the active window.
SYNOPSIS
#include "cxlwin.h"
int wmessage(char *str,int border,int leftofs,int attr);
INPUTS
str - address of message string
border - window border code. Can be one of the following:
TP_BORD - top border
BT_BORD - bottom border
leftofs - offset from left border to display message at
attr - attribute of message text
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_STRLONG - string could not fit in window
W_NOBORDER - window has no border
ALSO SEE
wbprintc wtitle
EXAMPLE
wmessage("[ F1=Help ]",BT_BORD,2,YELLOW|_BLACK);
------------------------------------------------------------------------
NAME
wmove
DESCRIPTION
Moves the active window to a new location on the screen.
SYNOPSIS
#include "cxlwin.h"
int wmove(int nsrow,int nscol);
INPUTS
nsrow - new starting row of window
nscol - new starting column of window
RETURN VALUE
W_NOERROR - no error
W_ALLOCERR - memory allocation error
129
W_NOACTIVE - no active window
ALSO SEE
wcopy wdrag wsize wslide
------------------------------------------------------------------------
NAME
wopen
DESCRIPTION
Opens a screen window and makes it active. The cursor location will
be initialized to window row 0, column 0. The text attribute will
be initialized to the same attribute as the window. You can open as
many windows as memory permits.
SYNOPSIS
#include "cxlwin.h"
WINDOW wopen(int srow,int scol,int erow,int ecol,int btype,
int battr,int wattr);
INPUTS
srow - starting row
scol - starting column
erow - ending row
ecol - ending column
btype - box type. Can be one of the following:
0 - single line border
1 - double line border
2 - single horz, double vert line border
3 - double horz, single vert line border
4 - thick line border
5 - no border (uses spaces for border chars). A
borderless window has a greater effective window
area than a window with a border.
battr - attribute of window's border.
wattr - attribute of window (and initially the text)
RETURN VALUE
The window handle of the new window or a zero if an error occurred.
If error, the global variable _winfo.errno will be set to one of the
following:
W_ALLOCERR - memory allocation error
W_INVCOORD - invalid coordinates
W_INVBTYPE - invalid box type
ALSO SEE
videoinit wactiv wclose wcloseall wfillch
EXAMPLE
wopen(10,10,20,40,0,LCYAN|_BLUE,LGREEN|_BLUE);
------------------------------------------------------------------------
130
NAME
wperror
DESCRIPTION
Opens an error window, displays an error message, sounds a beep,
waits for a keypress, then returns to caller. The error window is
opened in the general vicinity of the cursor position.
SYNOPSIS
#include "cxlwin.h"
int wperror(char *message);
INPUTS
message - address of the string containing the error message
RETURN VALUE
W_NOERROR - no error
W_ALLOCERR - memory allocation error
W_STRLONG - error message string too long
ALSO SEE
werrmsg
EXAMPLE
wperror("Field cannot be blank!");
------------------------------------------------------------------------
NAME
wpgotoxy
DESCRIPTION
Sets cursor coordinates within the active window. If cursor
coordinates are out of the window, wpgotoxy() will try to wrap them
around to fit in the window.
SYNOPSIS
#include "cxlwin.h"
int wpgotoxy(int wrow,int wcol);
INPUTS
wrow - window row (Y coordinate)
wcol - window column (X coordinate)
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
ALSO SEE
wgotoxy wreadcur
------------------------------------------------------------------------
131
NAME
wpickfile
DESCRIPTION
This function will open up a window and display as many
file/directory names in it as it can. The user can use a selection
bar to move through the file/directory names and select one. If all
of the file/directory names cannot fit in the window, scrolling and
paging is allowed. If the user selects a directory, wpickfile()
will change to that directory and display the list of
files/directories in it. After the selection is made, wpickfile()
will return the complete path name of the selected file.
SYNOPSIS
#include "cxlwin.h"
char *wpickfile(int srow,int scol,int erow,int ecol,int btype,
int bordattr,int winattr,int barattr,int title,
char *filespec,void (*open)(void));
INPUTS
srow - start row of pick window
scol - start column of pick window
erow - end row of pick window
ecol - end column of pick window. If ecol==-1, then the
window's width will conform to that of the longest
matching filename.
btype - window box type (0-5)
bordattr - border attribute
winattr - window attribute
barattr - selection bar attribute
title - display filespec title on upper border? (0=no, 1=yes)
filespec - match filespec (ie. "*.*")
open - address of the function to call upon each opening of the
file pick window. If you do not need to use this
feature, specify NULL.
RETURN VALUE
The address of the static string containing the full
drive:path\filename string of the selected file. If an error
occurred, NULL will be returned and _winfo.errno will be set to one
of the following:
W_ESCPRESS - the [Esc] key was pressed
W_ALLOCERR - memory allocation error
W_DOSERROR - DOS error (ie. invalid directory)
W_INVCOORD - invalid window coordinates
W_INVBTYPE - invalid box type
W_STRLONG - window not wide enough to hold largest file name
W_NOMATCH - no files matched input filespec
ALSO SEE
wpickstr wsetesc
EXAMPLE
char *fname;
132
fname=wpickfile(10,10,20,65,0,LCYAN|_BLUE,CYAN|_BLUE,BLUE|_LGREY,1
,"*.*",NULL);
printf("You selected: %s\n",fname);
------------------------------------------------------------------------
NAME
wpickstr
DESCRIPTION
This function will open up a window and display as many of the input
strings in it as it can. The user can use a selection bar to move
through the strings and select one. If all of the strings cannot
fit in the window, scrolling and paging is allowed. After the
selection is made, wpickstr() will return the array subsript of the
string that was selected.
SYNOPSIS
#include "cxlwin.h"
int wpickstr(int srow,int scol,int erow,int ecol,int btype,
int bordattr,int winattr,int barattr,char *strarr[],
int initelem,void (*open)(void));
INPUTS
srow - start row of pick window
scol - start column of pick window
erow - end row of pick window
ecol - end column of pick window. If ecol==-1, then the
window's width will conform to that of the longest string
in the input array.
btype - window box type (0-5)
bordattr - border attribute
winattr - window attribute
barattr - selection bar attribute
strarr - address of array of char pointers (strings) to select
from. The last pointer in the array MUST be NULL!
initelem - element of string to initialize selection bar to. If
given element is invalid, it will default to 0.
open - address of the function to call upon each opening of the
string pick window. If you do not need to use this
feature, specify NULL.
RETURN VALUE
The array subscript of the selected string. If an error occurred,
then -1 will be returned and _winfo.errno will be set to one of the
following:
W_ESCPRESS - the [Esc] key was pressed
W_INVCOORD - invalid window coordinates
W_INVBTYPE - invalid box type
W_STRLONG - window not wide enough to hold largest file name
ALSO SEE
wpickfile wselstr wsetesc
133
EXAMPLE
int i;
char *days[]= { "Sunday","Monday","Tuesday","Wednesday","Thursday",
"Friday","Saturday",NULL };
i=wpickstr(10,10,14,-1,0,YELLOW,LCYAN|_BLUE,BLUE|_LGREY,days,0,
NULL);
if(i!=-1) printf("You selected %s\n",days[i]);
------------------------------------------------------------------------
NAME
wprintc
DESCRIPTION
Displays a character in the active window. Control characters are
not recognized. Cursor position is not updated.
SYNOPSIS
#include "cxlwin.h"
int wprintc(int row,int col,int attr,int ch);
INPUTS
row - window row to display character at
col - window column to display character at
attr - text attribute for character
ch - character
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
ALSO SEE
wbprintc wprints wputc
EXAMPLE
wprintc(5,5,BLINK|LRED|_GREEN,'X');
------------------------------------------------------------------------
NAME
wprintf
DESCRIPTION
Displays a formatted string to the active window at the current
cursor position. Works like the standard printf() function does.
Recognizes control characters. Characters will be displayed in the
attribute set by the wtextattr() function. Updates cursor position.
Also recognizes CXL Escape sequences. See Appendix C for a list of
valid Escape codes.
SYNOPSIS
#include "cxlwin.h"
int wprintf(const char *format,...);
134
INPUTS
format - address of the format string. Refer to the your compiler's
run-time library reference manual for information on valid
format characters.
... - any additional arguments
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wputc wputns wputs wtabwidth wtextattr
EXAMPLE
int i=32767;
double d=3.14159;
char ch='X',*str="Hello, world";
wprintf("i = %d, d = %f, ch = %c, str = %s\n",i,d,ch,str);
------------------------------------------------------------------------
NAME
wprints
DESCRIPTION
Displays a string in the active window. Control characters are not
recognized. Cursor position is not updated.
SYNOPSIS
#include "cxlwin.h"
int wprints(int wrow,int wcol,int attr,char *str);
INPUTS
wrow - window row to display string at
wcol - window column to display string at
attr - text attribute for displayed characters
str - address of string
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
W_STRLONG - string too long to fit on window line
ALSO SEE
wcenters wprintsf wputs wrjusts wwprints
EXAMPLE
wprints(10,15,BLINK|YELLOW|_BROWN,"Hello, world");
------------------------------------------------------------------------
NAME
wprintsf
135
DESCRIPTION
Displays a string to active window using a CXL format string. If a
character in a string doesn't match its format control character, it
will be displayed as a '?'. Control characters are not recognized.
Cursor position is not updated.
SYNOPSIS
#include "cxlwin.h"
int wprintsf(int wrow,int wcol,int attr,char *format,char *str);
INPUTS
wrow - window row
wcol - window column
attr - text attribute
format - address of format string. Valid format string characters
are listed in Appendix D.
str - address of the string to display.
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVFORMT - invalid format string
W_STRLONG - there were more characters in the display string than
the format string would display.
ALSO SEE
wprints
EXAMPLE
char str1[]="5125900460",str2[]="(512) 590-2910";
wprintsf(3,5,LGREEN|_GREEN,"'('###') '###'-'####",str1);
wprintsf(4,5,LGREEN|_GREEN,"##############",str2);
------------------------------------------------------------------------
NAME
wputc
DESCRIPTION
Displays a character in the active window at current cursor position
using current text attribute. Recognizes control characters.
Updates cursor position.
SYNOPSIS
#include "cxlwin.h"
int wputc(int ch);
INPUTS
ch - the character to be displayed
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
136
ALSO SEE
wdupc wprintc wprintf wtabwidth wtextattr
------------------------------------------------------------------------
NAME
wputns
DESCRIPTION
Displays a string in the active window at the current cursor
location using current text attribute. The input width will
determine how many characters are actually displayed. Padding with
spaces or truncating of output will be used where neccessary.
Recognizes control characters. Updates cursor position.
SYNOPSIS
#include "cxlwin.h"
int wputns(char *str,int width);
INPUTS
str - address of the string to print
width - width to display output string at
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wprintf wputs wtextattr
EXAMPLE
wputns("Hello, world",5);
------------------------------------------------------------------------
NAME
wputs
DESCRIPTION
Displays a string in the active window at the current cursor
position using current text attribute. Recognizes control
characters. Updates cursor position. Also recognizes CXL Escape
sequences. See Appendix C for a list of valid Escape codes.
SYNOPSIS
#include "cxlwin.h"
int wputs(char *str);
INPUTS
str - the address of the string to display
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
137
ALSO SEE
wprintf wprints wputns wputsw wtabwidth wtextattr
EXAMPLE
wputs("\t\033LHello, \033Lworld!\n\n");
------------------------------------------------------------------------
NAME
wputsw
DESCRIPTION
Displays a string in active window at the current cursor position.
Words will be wrapped around to the next line if necessary.
Characters are displayed in the window's current text attribute.
Recognizes control characters. Updates cursor position. Also
recognizes CXL Escape sequences. See Appendix C for a list of valid
Escape codes.
SYNOPSIS
#include "cxlwin.h"
int wputsw(char *str);
INPUTS
str - the address of the string to display
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wprintf wputs wtextattr
EXAMPLE
wputsw("This is a very long string that will be wrapped around to "
"the next line.");
------------------------------------------------------------------------
NAME
wreadcur
DESCRIPTION
Reads the current cursor coordinates of the active window.
SYNOPSIS
#include "cxlwin.h"
int wreadcur(int *wrow,int *wcol);
INPUTS
wrow - address of integer to receive current window row
wcol - address of integer to receive current window column
RETURN VALUE
138
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wgotoxy
EXAMPLE
int wrow,wcol;
wreadcur(&wrow,&wcol);
------------------------------------------------------------------------
NAME
wrestore
DESCRIPTION
Restores a previously saved region of the screen screen and frees
the memory allocated by wsave().
SYNOPSIS
#include "cxlwin.h"
void wrestore(int *wbuf);
INPUTS
wbuf - address of previously wsave()d window.
ALSO SEE
srestore wsave
------------------------------------------------------------------------
NAME
wrjusts
DESCRIPTION
Displays a string right justified to specified column in the active
window. Does not recognize control characters. Does not update
cursor position.
SYNOPSIS
#include "cxlwin.h"
int wrjusts(int wrow,int wjcol,int attr,char *str);
INPUTS
wrow - window row to display string at
wjcol - window column that string will right justify to
attr - text attribute for displayed characters
str - address of string to display
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
W_STRLONG - string too long to fit in window at specified right
139
justification column.
ALSO SEE
wcenters wprints
------------------------------------------------------------------------
NAME
wsave
DESCRIPTION
Saves a region of the screen.
SYNOPSIS
#include "cxlwin.h"
int *wsave(int srow,int scol,int erow,int ecol);
INPUTS
srow - start row
scol - start column
erow - end row
ecol - end column
RETURN VALUE
Address of newly created window buffer or NULL if a memory
allocation error occurred.
ALSO SEE
ssave videoinit wintodisk wrestore
EXAMPLE
int *wbuf;
if((wbuf=wsave(10,10,20,40))==NULL)
printf("Memory allocation error\n");
------------------------------------------------------------------------
NAME
wscanf
DESCRIPTION
Inputs a formatted string from keyboard. Entered characters will
echo to the active window in the attribute set by the wtextattr()
function. Cursor position will be updated. Works like the standard
C library function scanf() does. This function is only supported by
the Turbo C version of CXL.
SYNOPSIS
#include "cxlwin.h"
int wscanf(const char *format,...);
INPUTS
format - format string. Refer to the section on scanf() in Turbo
C's run-time library reference manual.
140
... - any additional arguments
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wgetc wgetns wgets winputsf wtextattr
------------------------------------------------------------------------
NAME
wscroll
DESCRIPTION
Scrolls text lines within the active window, up or down.
SYNOPSIS
#include "cxlwin.h"
int wscroll(int count,int direc);
INPUTS
count - number of lines to scroll
direc - scroll direction:
D_UP - scroll up
D_DOWN - scroll down
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wdelline winsline wscrollbox
------------------------------------------------------------------------
NAME
wscrollbox
DESCRIPTION
Scrolls a region of the active window up or down.
SYNOPSIS
#include "cxlwin.h"
int wscrollbox(int wsrow,int wscol,int werow,int wecol,int count,
int direc);
INPUTS
wsrow - window start row
wscol - window start column
werow - window end row
wecol - window end column
count - number of lines to scroll
direc - direction of scroll:
141
D_UP - scroll up
D_DOWN - scroll down
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
ALSO SEE
wdelline winsline wscroll
------------------------------------------------------------------------
NAME
wselstr
DESCRIPTION
Allows user to select one string from an array of strings via an
in-place "menu". Provides Escape checking.
SYNOPSIS
#include "cxlwin.h"
int wselstr(int wrow,int wcol,int attr,char *strarr[],int initelem);
INPUTS
wrow - window row to display selections at
wcol - window column to display selections at
attr - attribute for selection text
strarr - the array of string (char *) pointers which to pick from.
The last pointer in the array MUST be NULL!
initelem - element of string to initialize selection bar to. If
given element is invalid, it will default to 0.
RETURN VALUE
The array subscript of the string which was selected. If an error
occurred, then -1 will be returned and _winfo.errno will be set to
one of the following:
W_NOACTIVE - no active window
W_ESCPRESS - [Esc] key was pressed (if Escape checking was on)
ALSO SEE
wpickstr wsetesc
EXAMPLE
int i;
char *prn_ports[]= { "PRN","LPT1","LPT2","COM1","COM2",NULL };
wprints(0,0,LCYAN|_BLUE,"Select printer:");
i=wselstr(0,16,LMAGENTA|_BLUE,prn_ports,0);
if(i!=-1) wprintf("You selected %s\n",prn_ports[i]);
------------------------------------------------------------------------
NAME
wsetesc
142
DESCRIPTION
Sets the Escape checking status for window keyboard input functions
that utilize Escape checking. By default, Escape checking is on.
When the user presses [Esc] while Escape checking is off, the
keypress will be ignored. The exception to this is when inside a
context-sensitive help screen or when inside a sub-menu of a
multi-level menu system.
SYNOPSIS
#include "cxlwin.h"
void wsetesc(int option);
INPUTS
option - 0 = turn Escape checking off, 1 = turn Escape checking on
ALSO SEE
wgetchf wgetns winpread winputsf wmenuget wpickfile wpickstr
------------------------------------------------------------------------
NAME
wshadoff
DESCRIPTION
Removes the shadow from the active window, if one exists. This
function is only needed when you want to prematurely remove the
active window's shadow. The wclose() function automatically calls
wshadoff() when it closes a window.
SYNOPSIS
#include "cxlwin.h"
int wshadoff(void);
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
wclose wshadow
------------------------------------------------------------------------
NAME
wshadow
DESCRIPTION
Gives the active window a shadow. The shadow will be cast to the
right of the window and will be translucent (the characters
underneath the shadow will show through in the given attribute).
SYNOPSIS
#include "cxlwin.h"
int wshadow(int attr);
143
INPUTS
attr - attribute to use for the shadow and the characters underneath
it. The most realistic looking shadow will be achieved using
DGREY|_BLACK, but depending upon the contrast setting on your
monitor, underlying characters may not be visible. Several
commercial programs use a shadow attribute of LGREY|_BLACK
for this reason.
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_ALLOCERR - memory allocation error
ALSO SEE
wshadoff
EXAMPLE
wshadow(DGREY|_BLACK);
------------------------------------------------------------------------
NAME
wsize
DESCRIPTION
Adjusts the size of the active window by changing the screen
coordinates of its lower-right corner.
SYNOPSIS
#include "cxlwin.h"
int wsize(int nerow,int necol);
INPUTS
nerow - new end row of window
necol - new end column of window
RETURN VALUE
W_NOERROR - no error
W_ALLOCERR - memory allocation error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
ALSO SEE
wcopy wmove
------------------------------------------------------------------------
NAME
wslide
DESCRIPTION
Smoothly slides active window to new screen position.
SYNOPSIS
144
#include "cxlwin.h"
int wslide(int nsrow,int nscol);
INPUTS
nsrow - new start row for window
nscol - new start column for window
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - invalid coordinates
W_ALLOCERR - memory allocation error
ALSO SEE
wdrag wmove
------------------------------------------------------------------------
NAME
wtabwidth
DESCRIPTION
Modifies the tab width to be used when displaying tabs in the active
window via the window TTY output functions. The default tab width
is 8.
SYNOPSIS
#include "cxlwin.h"
void wtabwidth(int tabwidth);
INPUTS
tabwidth - the new tab width
EXAMPLE
wputs("\n\tHello, world");
wtabwidth(4);
wputs("\n\tHello, world");
------------------------------------------------------------------------
NAME
wtextattr
DESCRIPTION
Sets the current text attribute for the active window. The current
text attribute is used by the window TTY output functions for
displaying text inside the active window.
SYNOPSIS
#include "cxlwin.h"
int wtextattr(int attr);
INPUTS
attr - the new text attribute
145
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
ALSO SEE
attrib wchgattr
EXAMPLE
wtextattr(LCYAN|_GREEN|BLINK);
wputs("Hello, world\n");
------------------------------------------------------------------------
NAME
wtitle
DESCRIPTION
Gives active window a title and displays title on top border line of
window. If active window has no border, then the window's record
will be updated, but no title will be visible.
SYNOPSIS
#include "cxlwin.h"
int wtitle(char *str,int tpos,int tattr);
INPUTS
str - address of title string or NULL to delete title
tpos - title position. If str==NULL then tpos is ignored. Valid
tpos values are:
TLEFT - left justified
TCENTER - centered
TRIGHT - right justified
tattr - attribute of window's title
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_ALLOCERR - memory allocation error
ALSO SEE
wmessage
EXAMPLE
wtitle("[ My Window ]",TCENTER,YELLOW|_BROWN);
------------------------------------------------------------------------
NAME
wunhide
DESCRIPTION
Unhides a previously hidden window. The unhidden window becomes the
active window.
146
SYNOPSIS
#include "cxlwin.h"
int wunhide(WINDOW whandle);
INPUTS
whandle - the handle of the window to unhide. If you want to unhide
the most recently hidden window, then specify 0.
RETURN VALUE
W_NOERROR - no error
W_ALLOCERR - memory allocation error
W_NOTFOUND - window handle not found
W_NOHIDDEN - no hidden windows
W_NOTHIDD - window not hidden
ALSO SEE
whide
------------------------------------------------------------------------
NAME
wunlink
DESCRIPTION
Releases all memory allocated by a window, then unlinks it from the
window chain, making it no longer accessible. The screen is not
changed in any way.
SYNOPSIS
#include "cxlwin.h"
int wunlink(WINDOW w);
INPUTS
w - handle of the window to unlink
RETURN VALUE
W_NOERROR - no error
W_NOTFOUND - input window handle was not found
ALSO SEE
wclose
------------------------------------------------------------------------
NAME
wvline
DESCRIPTION
"Draws" a vertical text line in the active window using characters
defined by the given box type. If the vertical line crosses a
horizontal line of the same box type, an appropriate intersection or
corner will be displayed.
SYNOPSIS
147
#include "cxlwin.h"
int wvline(int wsrow,int wscol,int count,int btype,int attr);
INPUTS
wsrow - window start row
wscol - window start column
count - number of line characters to display
btype - box type. Can be one of the following:
0 - single line
1 - double line
2 - single horz, double vert line
3 - double horz, single vert line
4 - thick line
5 - uses spaces for line characters
attr - attribute to use for text line
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_INVCOORD - entire text line could not fit in window
W_INVBTYPE - invalid box type
ALSO SEE
whline
------------------------------------------------------------------------
NAME
wwprints
DESCRIPTION
Prints a string to the specified window. The specified window can
be active, hidden, or blocked. Control characters are not
recognized. Cursor position is not updated.
SYNOPSIS
#include "cxlwin.h"
int wwprints(WINDOW whandle,int wrow,int wcol,int attr,char *str);
INPUTS
whandle - handle of window to display to
wrow - window row to write string to
wcol - window column to write string to
attr - text attribute for written characters
str - address of string to display
RETURN VALUE
W_NOERROR - no error
W_NOACTIVE - no active window
W_NOTFOUND - window handle not found
W_INVCOORD - invalid window coordinates
W_STRLONG - string too long (not all of string was displayed)
ALSO SEE
148
wprints
149
Appendix A - Text Attribute Identifiers
Foreground Colors Background Colors
Identifier Color Identifier Color
---------- ----- ---------- -----
BLACK - black _BLACK - black
BLUE - blue _BLUE - blue
GREEN - green _GREEN - green
CYAN - cyan _CYAN - cyan
RED - red _RED - red
MAGENTA - magenta _MAGENTA - magenta
BROWN - brown _BROWN - brown
LGREY - light grey _LGREY - light grey
DGREY - dark grey
LBLUE - light blue
LGREEN - light green
LCYAN - light cyan
LRED - light red
LMAGENTA - light magenta
YELLOW - yellow
WHITE - white
BLINK - blinking foreground
Example Usage:
BLINK|WHITE|_RED - blinking white on red
YELLOW|_BLUE - yellow on blue
LMAGENTA - light magenta on black
_BLUE - black on blue
150
Appendix B - Keycode Table
Key Norm Shift Ctrl Alt
---- ---- ----- ---- ---
A 1E61 1E41 1E01 1E00
B 3062 3042 3002 3000
C 2E63 2E42 2E03 2E00
D 2064 2044 2004 2000
E 1265 1245 1205 1200
F 2166 2146 2106 2100
G 2267 2247 2207 2200
H 2368 2348 2308 2300
I 1769 1749 1709 1700
J 246A 244A 240A 2400
K 256B 254B 250B 2500
L 266C 264C 260C 2600
M 326D 324D 320D 3200
N 316E 314E 310E 3100
O 186F 184F 180F 1800
P 1970 1950 1910 1900
Q 1071 1051 1011 1000
R 1372 1352 1312 1300
S 1F73 1F53 1F13 1F00
T 1474 1454 1414 1400
U 1675 1655 1615 1600
V 2F76 2F56 2F16 2F00
W 1177 1157 1117 1100
X 2D78 2D58 2D18 2D00
Y 1579 1559 1519 1500
Z 2C7A 2C5A 2C1A 2C00
1 0231 0221 N/A 7800
2 0332 0340 0300 7900
3 0433 0423 N/A 7A00
4 0534 0524 N/A 7B00
5 0635 0625 N/A 7C00
6 0736 075E 071E 7D00
7 0837 0826 N/A 7E00
8 0938 092A N/A 7F00
9 0A39 0A28 N/A 8000
0 0B30 0B29 N/A 8100
, 332C 333C N/A N/A
. 342E 343E N/A N/A
/ 352F 353F N/A N/A
; 273B 273A N/A N/A
' 2827 2822 N/A N/A
[ 1A5B 1A7B 1A1B N/A
] 1B5D 1B7D 1B1D N/A
` 2960 297E N/A N/A
- 0C2D 0C5F 0C1F 8200
= 0D3D 0D2B N/A 8300
\ 2B5C 2B7C 2B1C N/A
151
Key Norm Shift Ctrl Alt
---- ---- ----- ---- ---
F1 3B00 5400 5E00 6800
F2 3C00 5500 5F00 6900
F3 3D00 5600 6000 6A00
F4 3E00 5700 6100 6B00
F5 3F00 5800 6200 6C00
F6 4000 5900 6300 6D00
F7 4100 5A00 6400 6E00
F8 4200 5B00 6500 6F00
F9 4300 5C00 6600 7000
F10 4400 5D00 6700 7100
Enter 1C0D 1C0D 1C0A N/A
Ins 5200 5230 N/A N/A
Del 5300 532E N/A N/A
Esc 011B 011B 011B N/A
Home 4700 4737 7700 N/A
End 4F00 4F31 7500 N/A
PgUp 4900 4939 8400 N/A
PgDn 5100 5133 7600 N/A
<Tab> 0F09 0F00 N/A N/A
<BackSpace> 0E08 0E08 0E7F N/A
<LeftArrow> 4B00 4B34 7300 N/A
<RightArrow> 4D00 4D36 7400 N/A
<UpArrow> 4800 4838 N/A N/A
<DownArrow> 5000 5032 N/A N/A
<Keypad 5> N/A 4C35 N/A N/A
<Grey *> 372A N/A 7200 N/A
<Grey -> 4A2D 4A2D N/A N/A
<Grey +> 4E2B 4E2B N/A N/A
152
Appendix C - Window Output Escape Codes
Escape Code Function
----------- --------
+ - increase text attribute
- - decrease text attribute
A? - set text attribute to ?
F? - set foreground text attribute to ?
B? - set background text attribute to ?
I - toggle intensity
L - toggle blink
X - reverse text attribute
R? - set window row coordinate to ?
C? - set window column coordinate to ?
E? - erase ?:
W - entire window, home cursor
L - to end-of-line
S - to end-of-window
D?? - display ? character ? times
Window output Escape codes are only available in the window TTY output
string functions. Valid functions are wprintf(), wputs(), wputsw(), and
others. Also, the text inside help files can contain Escape codes
(excluding cross-reference items). The Escape code parameters MUST be
character (byte) size. Parameters should be input as binary. For
example, 5 would be '\005'. If you are using them from inside a
wprintf() format string, you can use the '%c' format specifier to supply
the parameter from the list of variables.
Example Usage:
wprintf("\033A%cNormal \033IBright\033I \033LBlink\033L"
" \033XReverse\033X\n",CYAN|_BLUE);
wprintf("\033R%c\033C%cRow %d, Col %d\n",3,5,3,5);
wputs("\033DA\014 = 'A' 12 times\n");
153
Appendix D - Format Control Characters
FCC Description
--- -----------
# Allows numeric characters '0' thru '9'.
% Allows numeric characters '0' thru '9' and ' '.
9 Allows numeric characters '0' thru '9', '.', '-', and '+'.
? Allows any character.
* Allows any printable character.
A Allows alpha characters 'A' thru 'Z', 'a' thru 'z', and ' '.
D Allows date characters '0' thru '9', '-', and '/'.
F Allows legal MS-DOS filename characters.
H Allows hexadecimal characters '0' thru '9', 'A' thru 'F',
and 'a' thru 'f'.
L Allows alpha characters 'A' thru 'Z', 'a' thru 'z', and ' '.
Input letters will be converted to lowercase.
M Allows alpha characters 'A' thru 'Z', 'a' thru 'z', and ' '.
Input letters will be converted to mixed case
P Allows alpha characters 'A' thru 'Z', 'a' thru 'z', and ' '.
Input letters will be displayed as spaces, which is useful
for entering passwords.
T Allows telephone number characters '0' thru '9', '(', ')',
'-', and ' '.
U Allows alpha characters 'A' thru 'Z', 'a' thru 'z', and ' '.
Input letters will be converted to uppercase.
W Allows legal MS-DOS filename characters, including
wildcards.
X Allows alphanumeric characters 'A' thru 'Z', 'a' thru 'z',
'0' thru '9', and ' '.
Y Allows yes/no response characters 'Y', 'N', 'y', and 'n'.
(space) Space characters can be used throughout a format string to
improve its readability.
< Start of inclusion set. An inclusion set allows you to
specify the only allowable characters for a position.
> End of inclusion set. Any characters listed between the
left and right angle brackets are part of the set.
[ Start of exclusion set. An exclusion set allows you to
specify characters that aren't allowed in that position.
] End of exclusion set. Any characters listed between the
left and right square brackets are part of the set.
' Start or end of quoted text that will be displayed either in
the input field or as you are typing. All characters in
between the start and end quotes will be displayed as text.
" Same as the single quote. Is useful if you need to actually
display a single quote as text. Note that in C, you must
represent the double quote as: \"
154
! Start and stop a command toggle sequence. Any characters
in between the start and stop exclamation points are treated
as command toggles. You can have as many command toggles
as you like between the exclamation points. Valid command
toggles are listed below. Command Toggles are valid with
inputsf() and winputsf() only!
Command
Toggle Description
------- -----------
- Decreases text attribute. Valid with winputsf() only.
+ Increases text attribute. Valid with winputsf() only.
C Toggles copying of quoted characters to receiving buffer.
The default is off.
E Toggles Escape checking. When on, if [Esc] is pressed, the
receiving buffer will be emptied and an error code will be
returned. The default for inputsf() is on. The default for
winputsf() is the value of the global variable _winfo.esc.
L Toggles lower-case conversion. When on, all input letters
will be forced to lower-case. The default is off.
M Toggles mixed-case conversion. When on, input letters will
be forced to upper-case for the first letter of each word
and lower-case for the remaining letters. The default is
off.
P Toggles password mode. When on, input characters will be
echoed to the screen as spaces. This is useful for password
fields. The default is off.
R Toggles Return checking. When off, if [Enter] is pressed,
it will be ignored. This is useful for forcing the user's
input. Default is on.
U Toggles upper-case conversion. When on, input letters will
be forced to upper-case. The default is off.
Examples:
inputsf(name,"'Enter name: ' !UR! XXXXX !R! XXXXXXXXXX");
Prompts for name, inputs string from keyboard converting characters to
uppercase as it goes, allows up to 15 alphanumeric characters as input.
The return key is disabled until at least 5 characters have been
entered. Input characters will be copied to the receiving buffer, name,
which must be large enough to hold all 16 characters - 15 for the input
string, and one for the terminating '\0'.
winputsf(phone," 'Enter phone: '!RC! '(' ### ') ' ### '-' ####");
Prompts for a full phone number including area code, allows only digit
characters and displays format punctuation as it goes. The entire field
must be filled before return can be pressed. All of the characters
except the prompt will be copied to the receiving buffer, phone. This
buffer must be large enough to hold 15 characters - 10 for the phone
number digits, 4 for the copied punctuation characters, and 1 for the
terminating '\0'.
155
winpdef( 1,16,date,"<01>#'/'<0123>#'/'<89>#",0,0,NULL,0);
Defines an input field that will accept a MMDDYY date. Note the use of
the inclusion set '<' and '>' characters to aid in allowing only valid
numbers. The receiving buffer, date, must be at least 7 characters to
hold the 6 date characters and the terminating '\0'.
156
Appendix E - Input Field Editing Keys
Key Action
--- ------
LeftArrow cursor left
RightArrow cursor right
UpArrow cursor up
DownArrow cursor down
Ctrl-LeftArrow word left
Ctrl-RightArrow word right
Tab field right
Shift-Tab field left
Enter process field
Ctrl-Enter process all fields
Decimal (.) move to right side of decimal point
Home beginning of field
End end of field line / end of field
Ctrl-Home beginning of first field
Ctrl-End end of last field
Ins toggle field insert mode
Del delete character at cursor
BackSpace delete character left
Ctrl-BackSpace delete word left
Ctrl-R restore field to original contents
Ctrl-T delete word right
Ctrl-U delete to end of field
Ctrl-Y delete to end of last field
Esc abort data entry (if Escape checking is on)
157